我几天前问了一个类似的问题,但我想我还在做错事,所以这个问题更有针对性:
根据我的理解并根据this book,privateFunction
对象外部不能提供函数mySingleton
,其中publicFunction
只能被调用这样:mySingleton.publicFunction
。
但是 - 根据我的意愿和意图,privateFunction在对象之外非常可用。
为什么?我做错了什么?
var mySingleton = new (function (window, document, undefined) {
var privateFunction = function () {
//code
},
mySingleton = {
publicFunction: function () {
//code
}
};
return mySingleton;
})(window, document, undefined);
编辑:我刚发现问题。语法错误,多么羞辱。看看第2行的分号。我昨晚发帖时错过了这一行:
var mySingleton = new (function (window, document, undefined) {
var self = this;
privateFunction = function () {
//code
},
mySingleton = {
publicFunction: function () {
//code
}
}
return mySingleton ;
})(window, document, undefined);
用逗号替换分号会使私有方法“再次”私有。无论如何,看看这段代码,我希望这样的语法会导致语法错误,因为privateFunction
之后的逗号是正确的 - 我是不是错了?
答案 0 :(得分:0)
你见过这种代码吗?
var toto = 'titi',
titi = 'tata',
tata = 'toto';
这是多个作业。这样我们就不会每次都重复使用var
关键字。但是,由于您未使用var
关键字,privateMethod
实际上已泄露到全局范围。那很糟糕。
我认为你正在寻找这种模式:
var mySingleton = function() {
function privateMethod() {}
return {
publicMethod: function() {}
};
}();
不需要window
,document
和undefined
垃圾。