0

我正在将单独的 .js 文件加载到我的 html 页面中。这些文件使用匿名函数,因此全局范围不会被全局变量填充。例如:这是我的 'utils.js' 文件:

(function(window){
   var Utils = {
       createURL: function() {
           console.log("creating url");
       }
   };
})(window);

我的问题:如果我有几个这样的 .js 文件,它们如何在不使用全局范围的情况下相互引用?就目前而言,我只能从同一个 utils.js 文件中调用此函数:

var myUtils = new Utils();
4

4 回答 4

2

您可以创建全局模块并仅公开所需的功能,例如...

// In some JS file
var moduleX = (function(window){
   var Utils = function(){

   };

   return {
       "Utils" : Utils
   };
})(window);

// In a some other JS file
var util = new moduleX.Utils();

顺便说一句,您不能实例化 JSON 对象(Utils在您的情况下)。所以请把它改成一个函数。

于 2013-07-03T12:46:48.117 回答
2

您可以使用 javascript 加载器,例如

如果您不想使用加载器,也许您可​​以使用诸如mediatormodule之类的设计模式将全局使用减少到最低限度。

于 2013-07-03T12:47:02.577 回答
1
(function(window){
   var app = {};
    app.Utils = {
        createUrl:function(){}
    };
    window.app = app;
})(window);

然后您可以像这样使用该应用程序:

app.Utils.createUrl();
于 2013-07-03T12:50:23.970 回答
1

如果您不想使用第三方工具,可以使用以下模式将所有内容包装到一个模块中:

//file1
var myModule = (function(window, that){

    var myVar = 1;

    that.myMethod1 = function(){
        console.log("i am module 1");
    };

    return that;
}(window, myModule || {}));

//file2
var myModule = (function(window, that){

    that.myMethod2 = function(){
        console.log(typeof myVar); //undefined
        that.myMethod1();   //i am module 1
    };

    return that;
}(window, myModule || {}));

这将确保您只有一个全局变量。但是,您当然不能访问另一个文件的局部变量。

于 2013-07-03T12:51:05.817 回答