我有一个代码
var a = function(){}; var b = a.call; b() //TypeError: b is not a function
typeof b是“function”,控制台中的log b显示ƒ call() { [native code] }
有人可以解释一下这种行为吗?
它不起作用的原因是.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
函数设置为this
的b
值(这也是Function.prototype.call
方法),但是你在调用时这样做。