将function.call分配给变量

时间:2017-12-29 14:28:42

标签: javascript function call

我有一个代码

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

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

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

1 个答案:

答案 0 :(得分:1)

它不起作用的原因是.call()要求函数在调用时为this值,但您已将其与a分离,因此那里没有更多的关系。

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

如果你这样做了,那就可以了:

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

那是因为现在a函数被绑定为this的{​​{1}}值。

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

.call

现在,您要将var b = a.call; b.call(a); 功能设置为a this的{​​{1}}值(这也是b方法),但您还是在调用时这样做。