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 に答える