javascript – Function.prototype.call分配给变量时的意外行为

前端之家收集整理的这篇文章主要介绍了javascript – Function.prototype.call分配给变量时的意外行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码调用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一样.

猜你在找的JavaScript相关文章