这看起来应该很简单:
var print = console.log;
print("something"); // Fails with Invalid Calling Object (IE) / Invalid Invocation (Chrome)
为什么它不起作用?
这看起来应该很简单:
var print = console.log;
print("something"); // Fails with Invalid Calling Object (IE) / Invalid Invocation (Chrome)
为什么它不起作用?
因为您使用全局对象作为接收者来调用该方法,而该方法是严格非泛型的,并且恰好需要一个实例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 );