interface.js
((function(){
var Person=function(){
}
.......
})();
implemention.js
((function(){
//access local variables(Person) in interface.js
Person.prototype.eat=function(){
}
})();
加载它们:
function getScript(src) {
document.write('<' + 'script src="' + src + '"' + ' type="text/javascript"><' + '/script>');
}
getScript("interface.js");
getScript("implemention.js");
如图所示,我想访问本地变量&#34; Person&#34;在interface.js
中从implemention.js
定义,无法直接访问,所以我尝试使用这样的闭包:
interface.js
((function(){
...
var Person=function(){
}
window._load_implement=(function(){
return function(impl){
impl && impl();
delete window._load_implement;
}
})();
})();
implemention.js
((function(){
var imp=function(){
Person.prototype.eat=....
}
window._load_implement(imp);
})();
IMO,当imp
方法运行时,Peson
和其他变量应该关闭,这意味着应该访问,但它不起作用。
有什么不对吗?
我发布了这个问题并试图得到一个答案,因为我看到了一些类似的用法,例如以谷歌地图为例,将加载main.js
,其中所有与地图相关的对象如Map
{ {1}}并在那里定义了一些util函数,然后在需要时加载其他谷歌地图模块,如InfoWindow
,但Marker
可以infowindow.js
中定义的所有util函数。
答案 0 :(得分:0)
如果要使用立即调用的函数表达式并将对象添加到全局命名空间,可以将它们显式添加到窗口对象或正确范围内的另一个非全局对象,而不是将对象定义为函数内的局部变量:
(function(){
window.Person = function(){
}
.......
})();
或
var Person = (function(){
})();
后者被称为module pattern。