一段时间以来,我一直在使用 objectOne 的设计模式,如下所示。我不记得我在哪里捡到它了。我试图找到它,但找不到。也许它是我读到的一些东西的混合体。今天我发现它有很大的缺陷,因为它this
是解析到窗口对象,使所有公共方法都是全局的。我的印象是,当this
在函数中使用时,它会引用函数本身,而不是全局窗口对象。我想不是这样吧?有人可以解释我遗漏的东西或指向我解释它的资源吗?我也有兴趣修复这种模式或找到一个没有全局方法名称问题的类似模式。我想如果我会使用除 , 以外的this
变量fn
,然后我返回它,然后它会解决问题。提前感谢您对这个问题的任何帮助,抱歉它有点含糊。
JS 小提琴:http: //jsfiddle.net/nLL8y/3/
myapp = {};
myapp.objectOne = function() {
var that = this,
p = {};
this.public = function() {
console.log(this);
};
p.private = function() {};
return this;
}();
myapp.objectTwo = {
public: function() {
console.log(this);
},
notPrivate: function() {}
};
myapp.objectThree = function() {
var fn = {},
p = {};
fn.public = function() {
console.log(this);
};
p.private = function() {};
return fn;
}();
//creates global functions
myapp.objectOne.public();
//doesn't allow private
myapp.objectTwo.public();
//seems to work
myapp.objectThree.public();