gpt4 book ai didi

javascript - functionName() 和 functionName.call(this) 的区别

转载 作者:行者123 更新时间:2023-11-29 19:08:42 25 4
gpt4 key购买 nike

我研究 javascript 中的函数继承。根据我读过的文章,我写了代码:

function Base(){
var enableVar = true

this.enable = function(){
console.log("enable");
enableVar = true;
}
this.disable = function(){
console.log("disable");
enableVar = true;
}
}

function Child(){
Base.call(this);
}

new Child().enable();

这段代码工作正常,我在控制台中看到消息。

但我不明白行:

Base.call(this);

对我来说,它是 Base 函数调用,其中 this 替换为 this 因此它与 Base(); 相同;

但看起来我的状态是错误的。我看到错误:

VM898:62Uncaught TypeError: (intermediate value).enable is not a function(…)

请为我澄清差异。

更新

function funcB(){
return this.a;
}

function funcA(){
this.a = 2;
return funcB();
}
alert(funcA());

尽管我像 funcB(); 一样调用 funcB,但此代码会提示 2

我真的不明白区别

最佳答案

functionName.call(obj) 正常调用 functionName,有一个主要区别:在 functionName 内部,this 指的是 obj。通常 this 引用 window,但是让 this 引用 obj 非常适合继承,因为你可以继续在所有构造函数中使用 this

编辑(解释更新):

这是您的代码:

function funcB(){
return this.a;
}

function funcA(){
this.a = 2;
return funcB();
}
alert(funcA());

我们将逐步完成这一过程。实际运行的第一件事是 alert(funcA());,它调用 funcA()。默认情况下,该代码将 this 视为等于 window(window 是 javascript 的全局变量容器)。所以计算机认为下一步(执行 funcA)是这样的:

function funcA(){
window.a = 2;
return funcB();
}

该代码将全局变量 a 设置为 2,并将返回 funcB 返回的任何内容,所以我们来看看 函数B。请记住,默认情况下,javascript 设置 this = window,所以 funcB 实际上是

function funcB(){
return window.a;
}

记住我们在 funcA 中设置了 window.a = 2,所以 funcB 变成了

function funcB(){
return 2;
}

这意味着 funcA 变成了

function funcA(){
window.a = 2;
return 2;
}

这意味着 alert(funcA()); 变成了 alert(2);

关于javascript - functionName() 和 functionName.call(this) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821128/

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