gpt4 book ai didi

javascript - 为什么我不能 var a = someFn.call; A();?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:17 25 4
gpt4 key购买 nike

这似乎是矛盾的......在 Chrome 控制台中:

> var forEach = Array.prototype.forEach.call;

> forEach
function call() { [native code] }

> Object.getPrototypeOf(forEach);
function () {}

> forEach([1,2,3], function(a) { console.log(a); });
Uncaught TypeError: forEach is not a function

我猜在 JS 内部 function.call 不完全像普通函数一样对待?

最佳答案

你也可以这样做,如果你想做 forEach(array, fn)

var forEach = Function.call.bind(Array.prototype.forEach);

现在您可以像以前一样使用它了:

forEach([1,2,3], function(a) { console.log(a); });

您正在做的是将调用 this 绑定(bind)到 Array.prototype.forEach。这只是编写 Array.prototype.forEach.call 的简写。

如果您想象调用是如何“调用”该函数的,那就更容易了,所以想象一下调用函数是这样做的(实际上不是这样的):

return this(arg1, arg2, etc);

现在假设 bind 返回调用函数,将 this 绑定(bind)到 Array.prototype.forEach.call:

return Array.prototype.forEach.call(arg1, arg2, etc);

您当然可以自己做同样的事情:

var forEach = function(array, fn) {
return Array.prototype.forEach.call(array, fn);
}

虽然我不确定哪一个会更好,但性能方面。

关于javascript - 为什么我不能 var a = someFn.call; A();?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893367/

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