1

我有这个代码

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

typeof b'function'console.log(b)显示ƒ call() { [native code] }

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

4

1 回答 1

2

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

所以因为b, 也就是Function.prototype.call, 没有为thisarg 提供函数,所以它没有有效的函数可以调用,所以它给出了一个错误。

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

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

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

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

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

现在您将a函数设置thisb(这又是Function.prototype.call方法)的值,但您是在调用点执行此操作。

于 2017-12-29T14:32:39.327 回答