以下
代码调用console.log打印“hello”:
console.log.call(console,"hello")
但是,下面的代码抛出TypeError:
x = console.log.call
x(console,"hello")
抛出:
Uncaught TypeError: x is not a function
at <anonymous>:1:1
谁能解释这个奇怪的场景?
(当然,呼叫和申请都是一样的)
.call
获取从其参数
调用的
函数.
您通过x调用它而没有此参数,因此它没有调用函数(或者更确切地说,它尝试调用窗口)并给出错误.
您需要将x变量绑定到日志函数:
x = console.log.call.bind(console.log);
额外奖励:.call来自Function.prototype,无论您如何访问它都是一样的.因此,Function.call.bind(console.log)也可以工作(因为Function是一个函数,因此具有.call).和Date.call一样.