我有这个代码
var a = function(){}
var b = a.call
b() // TypeError: b is not a functiontypeof b为'function',console.log(b)显示为ƒ call() { [native code] }。
有人能解释一下这种行为吗?
发布于 2017-12-29 22:32:39
它不工作的原因是,.call()需要一个函数在调用时作为this值,但您已经将其与a分离,因此没有更多的关系。
因此,因为没有为this参数提供b (即Function.prototype.call )函数,所以它没有有效的函数可供调用,因此它会给出一个错误。
如果你这样做了,它会起作用的:
var b = a.call.bind(a);这是因为现在a函数被绑定为.call()的this值。
另一种方法是使用.call调用.call。
var b = a.call;
b.call(a);现在,您将a函数设置为b的this值(同样是Function.prototype.call方法),但您是在调用点执行此操作的。
https://stackoverflow.com/questions/48024108
复制相似问题