【发布时间】:2011-12-13 12:08:48
【问题描述】:
我有这个代码(JSFiddle)
var OBJ = function(){
var privateVar = 23;
var self = this;
return {
thePrivateVar : function() {
return privateVar;
},
thePrivateVarTimeout : function() {
setTimeout(function() { alert(self.thePrivateVar()); } , 10);
}
}
}();
alert(OBJ.thePrivateVar());
OBJ.thePrivateVarTimeout();
这是我遇到的一个实际问题的抽象。
所以 - 我希望对 OBJ.thePrivateVarTimeout() 的调用等待 10 然后 alert 等待 23(我希望它通过其他公开的方法访问)。
但是self 似乎设置不正确。当我设置self = this 时,this 似乎不是对函数的引用,而是对全局对象的引用。这是为什么呢?
如何让公共方法thePrivateVarTimeout调用另一个公共方法thePrivateVar?
【问题讨论】:
-
为什么会这样?因为你是在正常调用函数(
func())。在这种情况下,this始终引用全局对象。如果您希望它引用一个空对象,请使用new调用它或指定一个:var self = {};。 -
@FelixKling 感谢这使得
self设置正确。我仍然不能用它来调用thePrivateVar。我认为 Raynos 的回答是我应该这样做的方式。
标签: javascript scope public-members