Chromeでは、次のようにUncaught TypeErrorが生成されます。呼び出しが不正です:
g = console.log;
g(1);
なぜこれが起こるのですか、そしてなぜ私console.log
は通常のオブジェクトのように扱うことができないのですか?
Chromeでは、次のようにUncaught TypeErrorが生成されます。呼び出しが不正です:
g = console.log;
g(1);
なぜこれが起こるのですか、そしてなぜ私console.log
は通常のオブジェクトのように扱うことができないのですか?
への参照を失ったために発生しますconsole
。log
コンテキストなしで、直接呼び出しているだけです。のコンテキストで関数を呼び出して、機能させることができますconsole
。
g.call(console, 1);
または、毎回それを行う手間を省くために、関数をconsole
オブジェクトにバインドし直すことができます。
var g = console.log.bind(console);
参考文献:
Function.prototype.call
Function.prototype.apply
(ここでは使用しませんが、それでも興味深い)Function.prototype.bind