다음 코드를 사용하면 객체에서 값을 가져 와서 전역 네임 스페이스에 추가 할 수 있습니다. 이것은 노출 기능에 정의되어변수를 함수 범위/클로저에 추가하십시오. 함수는 window 객체와 같습니다.
function expose(key, obj){
window[key] = obj[key];
}
나는 그래서으로 노출, 변경, 원하는
// before
map //undefined
_.map // have to use like this
expose('map', _)
// after
map // function
밑줄에서 같은 맵으로 나는 도서관에서 많이 사용하는 기능을 수행하는 데 사용되었을 수 있습니다 그것은 동일한 일을하지만 종결 만합니다. 이 문제를 해결하는 방법은 제가 말하고자하는 질문입니다.
map //undefined
(function(){
expose('map', {})
// map can be used here
}())
// map is still undefined here.
나는이 경우이 문제가 내가 여기에 요점을 설명하기 위해 단순화 된 버전을 제시 오전 var map = _.map
으로 해결 될 수있다 알고있다. 위에 설명 된대로 문제를 해결하고 싶습니다. 한 번에 둘 이상의 변수를 표시하는 함수를 작성할 수 있습니다.
복잡한 예를 보려면이 repo를보십시오. 노출 기능
https://github.com/CrowdHailer/cuminjs
시험은
https://github.com/CrowdHailer/cuminjs/blob/master/spec/cumin_spec.js
대형 예를 들어 내가 최종 결과가
// file one - sets up some core utilities
var MyModule = (function(){
var foo = function(){
// ..some functionality
};
return {
foo: foo
// plus several more functions
};
}());
// file two - sets up some other functionality.
// Makes use of lots of the functions set up in file 1
(function(parent){
// var foo = MyModule.foo -trying to avoid as want to use several maybe names change
expose([foo, etc], MyModule);
var bar = function(){
// .. other code would like to make use of foo
};
parent.extend({
bar: bar
});
}(MyModule))
단지 RequireJS (http://requirejs.org/)와 비슷한 것을하려고하십니까? –
나는 requirejs에 대한 많은 경험이 없다. 그러나 비슷한 점이있을 수있는 이음새를 빠르게 읽을 수 있습니다. 요구 사항으로 인해 항목을 클로저에 넣을 수 있습니까? –
모듈 로더가 더 많습니다. 그러나 예. 모듈을 (클로저로) 정의한 다음 코드의 다른 곳에서 의존성으로 "요구"할 수 있습니다. –