我正在尝试使用 Javascript 中的“this”上下文,但遇到了一种我不明白的情况。
根据从此处找到的 javascript 工作方式,我了解当在对象上调用函数时,该对象会作为最触发参数隐式传入(或在使用call
方法时显式传入。
但是有 2 个案例我尝试测试并没有达到我的预期。请查看//Why doesn't work?之后的 2 行 为什么以下 2 个值未定义?
这是jsFiddle中的代码(也粘贴在下面)
function Beta(c, myValParam) {
var callback = c;
this.myVal = myValParam;
this.RunCallback = function () {
callback();
}
this.ShowVal = function () {
alert("FROM Beta: " + this.myVal);
}
}
function Alpha() {
this.myVal = "Alpha's Property";
this.ShowVal = function () {
alert("FROM Alpha: " + this.myVal);
}
}
a = new Alpha();
a.ShowVal();
b = new Beta(a.ShowVal, "Beta's property passed in");
b.ShowVal();
//Why doesn't ths work? Why are the follwoing 2 values undefined?
b.RunCallback.call(b); //Shouldn't this display the value in b?
b.RunCallback();
b2 = new Beta(function() { return a.ShowVal.call(a); }, "Z");
b2.RunCallback();
编辑:感谢 Quentin、dystroy 和dough 的回答,我更新了 jsFiddle以显示上下文恢复到窗口对象时产生的值
这是解决我遇到的问题的调用代码 callback.call(this)