我正在开发一个类似的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();
})();
我不能像以前那样执行模块的方法,我的代码不能在里面工作。
那么我问的是什么? 你知道工作标签容器怎么样? 并且,如果标签容器在全局自动执行功能中包含我的代码,我怎么能更改模块的代码以使其在内部工作。 感谢您的回答,如果您不清楚,我会尽快回答您的问题。
答案 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.
}