如何确保标签容器不会弄乱我的代码

时间:2013-01-29 13:30:21

标签: javascript namespaces

我正在开发一个类似的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();
})();

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

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

2 个答案:

答案 0 :(得分: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对象下。

答案 1 :(得分: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.
}