gpt4 book ai didi

javascript - 为什么在此示例中 Javascript 中 'this' 的上下文没有改变?

转载 作者:行者123 更新时间:2023-11-30 10:35:19 25 4
gpt4 key购买 nike

我正在 Javascript 中试验“this”的上下文,但我遇到了一种我不理解的情况。

基于从 here 中找到的 javascript 工作方式, 我理解当在对象上调用函数时,该对象作为第一个参数隐式传入(或者在使用 call 方法时显式传入。

但是有 2 个我尝试测试的案例没有达到我的预期。请查看 //Why doesn't ths work 之后的两行?为什么以下 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 的回答,我已经 updated the jsFiddle显示上下文恢复到窗口对象时产生的值

这里是 code with the call to callback.call(this) 解决了我遇到的问题

最佳答案

Shouldn't this display the value in b?

您正在调用(在 b 的上下文中)一个对 this 不做任何事情的函数。该函数在 window(默认对象)的上下文中调用 callback(它是 a.showVal 的副本)。

关于javascript - 为什么在此示例中 Javascript 中 'this' 的上下文没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14321534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com