我有一个代码
var a = function(){}; var b = a.call; b() //TypeError: b is not a function
typeof b是“function”,控制台中的log b显示ƒ call() { [native code] }
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
它不起作用的原因是.call()
要求函数在调用时为this
值,但您已将其与a
分离,因此那里没有更多的关系。
因为b
,Function.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
方法),但您还是在调用时这样做。