我有这个代码
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
, 没有为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
方法)的值,但您是在调用点执行此操作。