将function.call分配给变量

问题描述 投票:0回答:1

我有一个代码

 var a = function(){}; var b = a.call; b() //TypeError: b is not a function

typeof b是“function”,控制台中的log b显示ƒ call() { [native code] }

有人可以解释一下这种行为吗?

javascript function call
1个回答
1
投票

它不起作用的原因是.call()在调用时需要一个函数作为this值,但你已经从a中分离出来了,所以那里没有更多的关系。

所以因为b这个Function.prototype.call没有给this arg函数,所以它没有调用的有效函数,所以它给出了一个错误。

如果你这样做,它会起作用:

var b = a.call.bind(a);

那是因为现在a函数被绑定为this.call()值。

另一种方法是使用.call来调用.call

var b = a.call;
b.call(a);

现在你将a函数设置为thisb值(这也是Function.prototype.call方法),但是你在调用时这样做。

© www.soinside.com 2019 - 2024. All rights reserved.