一段时间以来,我一直在使用objectOne的设计模式,如下所示。我不记得我在哪里拿起它。我试图找到它,但不能。也许是我读到的一些混合物。今天我发现它很有缺陷,因为this
正在解析窗口对象,使所有公共方法成为全局。我的印象是,当在一个函数中使用this
时,它会引用函数本身,而不是全局窗口对象。我想这不是这种情况?有人可以解释一些我错过的东西,或者指出一个解释它的资源吗?我也对修复这个模式感兴趣,或者找到一个与全局方法名不存在这个问题的类似的模式。我想如果我会使用this
以外的变量,也许fn
,并且我返回那个,那么它会修复一些事情。提前感谢您对这个问题的任何帮助,对不起它的模糊。了解Javascript中的功能范围,`this`和OO设计模式
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();
这是指最接近的绑定对象实例,在这种情况下,这将是窗口。你的代码应该做什么? –
https://developer.mozilla.org/en/JavaScript/Reference/Operators/这个 –
'this'从来没有指向函数本身,除非你明确*设置它:'func.call(func)'。 –