我很惊讶我找不到关于这个话题的更多信息(可能是我的搜索技能低于标准)。通常,一旦我认为我理解了 JavaScript 关键字的工作原理,“this”就会按照我理解的方式停止工作。我将解决一个这样的问题。
我的理解:“当使用'new'关键字调用函数时......'this'指的是根函数/'class'。当从实例化的'class'中的函数使用时,它指的是CALLING函数”。-- 理解这一点非常重要:当从页面上的另一个函数调用函数时,“this”关键字将引用调用函数,而不是目标函数所在的“类”。
在下面的示例中,我尝试了两种从公共函数设置变量的方法。两者都失败了。我试图理解为什么会这样以及如何使它工作。
var functionClass = new function(){
var _isReady = false;
var _getReady = function(){
// ... do some work to get ready
_isReady = true;
}
return {
IsReady: _isReady,
GetReady: _getReady
}
}
var functionClass1 = new function () {
var _isReady = false;
var _self = this;
var _getReady = function () {
// ... do some work to get ready
_self.IsReady = true;
}
return {
IsReady: _isReady,
GetReady: _getReady
}
}
functionClass.GetReady();
functionClass1.GetReady();
console.log(functionClass.IsReady); // Expect true ... I get false
console.log(functionClass1.IsReady); // Expect true ... I get false
更新:
我可能应该指出我正在使用显示模块模式,并且希望任何解决方案都在这种情况下。虽然我确信有多种不同的方法可以做到这一点,但我想将解决方案集中在这种模式上。