访问另一个文件中定义的局部变量

时间:2014-12-01 08:00:41

标签: javascript

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函数。

1 个答案:

答案 0 :(得分:0)

如果要使用立即调用的函数表达式并将对象添加到全局命名空间,可以将它们显式添加到窗口对象或正确范围内的另一个非全局对象,而不是将对象定义为函数内的局部变量:

(function(){
    window.Person = function(){
    }
    .......
})();

var Person = (function(){

})();

后者被称为module pattern