为什么我不能重命名console.log?

时间:2013-06-28 13:21:35

标签: javascript

这似乎应该非常简单:

var print = console.log;
print("something"); // Fails with Invalid Calling Object (IE) / Invalid Invocation (Chrome)

为什么不起作用?

1 个答案:

答案 0 :(得分:16)

如果您使用全局对象作为接收器调用该方法,则该方法严格来说是非泛型的,并且只需要Console的实例作为接收器。

通用方法的一个例子是Array.prototype.push

   var print = Array.prototype.push;
   print(3);
   console.log(window[0]) // 3

你可以这样做:

var print = function() {
     return console.log.apply( console, arguments );
};

ES5提供的.bind也达到了与上述相同的效果:

var print = console.log.bind( console );