0

我正在开发一个看起来像这样的 Javascript 模块。

var myApp = (function(){
    private function1();
    private function2()

    return {
    publicMethod1:function(){}
    publicMethod2:function(){}
    publicMethod3:function(){}
    }
})();
myApp.publicMethod3();

我的模块可能会在标签容器中使用,我不太确定它是如何工作的,但我担心如果我的模块在全局自动执行函数中执行,如下所示:

(function(){

var myApp = (function(){
    private function1();
    private function2()

    return {
    publicMethod1:function(){}
    publicMethod2:function(){}
    publicMethod3:function(){}
    }
})();
myApp.publicMethod3();
})();

我不能像以前那样执行我的模块的方法,我的代码不能在里面工作。

那我在问什么?你知道标签容器是怎么工作的吗?而且,如果标签容器将我的代码包含在全局自动执行函数中,我如何更改模块的代码以使其在内部正常工作。感谢您的回答,如果您不清楚,我会尽快回答您的问题。

4

2 回答 2

1

如果你担心你的代码在 IIFE 中定义时不再工作,那么唯一的办法就是确保你的模块是窗口对象的全局属性。

// append it to the window instead of using var
// this way it will always be global and not constrained to any wrapping scopes
window.myApp = (function(){
   ...
})();

请注意,将属性附加到窗口对象会很快变得非常混乱 - 尝试坚持只执行一次并将所有其他代码暴露在myApp对象下。

于 2013-01-29T13:43:32.200 回答
0

你的代码中有一堆语法错误,试试这个:

(function(){
    var myApp = (function(){
        var function1 = function(){};   // Fixed function declaration
        var function2 = function(){};

        return {
            publicMethod1:function(){}, // Added missing comma's
            publicMethod2:function(){},
            publicMethod3:function(){}
        }
    })();
    myApp.publicMethod3();
})();

JavaScript中没有private关键字,函数必须声明为:

var name = function(){/* function body here */};

// or 
function name(){/* function body here */}

// or, when declared in objects:
var someObject = {
    name: function(){/* function body here */}
}

此外,对象中的项目用逗号分隔,如下所示:

var someObject = {
    property1: "value 1",
    property2: "value 2",
    property3: true,
    property4: 1234,
    property5: 1234   // Note: no comma after the last property.
}
于 2013-01-29T13:33:42.107 回答