我有这个代码
var a = function(){}
var b = a.call
b() // TypeError: b is not a function
typeof b是'function'和console.log(b)显示ƒ call() { [native code] }。
有人可以解释这种行为吗?
我有这个代码
var a = function(){}
var b = a.call
b() // TypeError: b is not a function
typeof b是'function'和console.log(b)显示ƒ call() { [native code] }。
有人可以解释这种行为吗?
它不起作用的原因是它.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函数设置this为b(这又是Function.prototype.call方法)的值,但您是在调用点执行此操作。