gpt4 book ai didi

javascript - 为什么 fn.call() 分配给变量后失败

转载 作者:太空宇宙 更新时间:2023-11-04 16:10:44 26 4
gpt4 key购买 nike

假设我们创建一个简单的函数

> function foo() { return 0; }

我们可以直接调用它

> foo();
> 0

或者我们可以使用 Function.prototype.call() 方法调用它

> foo.call({}); // Using empty object as this arg
> 0

到目前为止一切顺利。现在事情变得奇怪了。我们总是可以在 JavaScript 中将函数分配给变量,并以新名称调用它

> var x = foo;
> x();
> 0

但是,如果我们对 Function.prototype.call() 尝试同样的操作,我们会收到错误

> var x = foo.call;
> x({});
> Uncaught TypeError: x is not a function

我想这与原型(prototype)链在 javascript 中的工作方式有关。有人可以向我解释一下这里的问题吗?

最佳答案

当您获取对 call 函数的引用时:

var x = foo.call;

它不会继承上下文。为了使其正常工作,您需要将上下文绑定(bind)调用:

function foo() { return 0; }

var x = foo.call.bind(foo);

x(); //0

这也可以通过在创建x之后进行绑定(bind)来完成:

function foo() { return 0; }

var x = foo.call;

x.bind(foo)(); //0

关于javascript - 为什么 fn.call() 分配给变量后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41526792/

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