6

这看起来应该很简单:

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

为什么它不起作用?

4

1 回答 1

18

因为您使用全局对象作为接收者来调用该方法,而该方法是严格非泛型的,并且恰好需要一个实例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 );
于 2013-06-28T13:23:47.997 回答