重複の可能性:
chrome console.log のエイリアス
これは本当にばかげていますが、console.log を省略できません (私は Chrome を使用しています)。これが私の素朴な試みです:
var log = console.log;
log("Bingo"); // Uncaught TypeError: Illegal invocation
apply() を使用する必要がありますか? でも、その場合は引数を渡す必要がありますよね?
重複の可能性:
chrome console.log のエイリアス
これは本当にばかげていますが、console.log を省略できません (私は Chrome を使用しています)。これが私の素朴な試みです:
var log = console.log;
log("Bingo"); // Uncaught TypeError: Illegal invocation
apply() を使用する必要がありますか? でも、その場合は引数を渡す必要がありますよね?
Javascript メソッドへの参照にはオブジェクト自体への参照が含まれていないため、これは失敗します。console.log
メソッドを変数に割り当て、呼び出しを に適用する簡単で正しい方法は、メソッドでメソッドconsole
を使用し、引数として渡すことです。bind
log
console
var log = console.log.bind(console);
すべてのメソッドには隠しthis
引数があり、おそらく言語設計が悪いため、メソッドへの参照を取得しても閉じられません。メソッドのbind
目的は、引数を関数に事前に割り当て、関数が予期していた残りの引数を受け入れる関数を返すことです。への最初の引数bind
は常に引数である必要this
がありますが、実際にはそれを使用して任意の数の引数を割り当てることができます。
を使用bind
すると、より多くの引数を受け入れるメソッドの機能を失わないという顕著な利点があります。たとえば、console.log
実際には任意の数の引数を受け入れることができ、それらはすべて 1 つのログ行に連結されます。
bind
に追加の引数を事前に割り当てるために使用する例を次に示しconsole.log
ます。
var debugLog = console.log.bind(console, "DEBUG:");
呼び出すdebugLog
と、ログ メッセージの先頭にDEBUG:
.
簡単な方法は、関数でラップすることです。
var log = function (l) {
console.log(l);
}
ただし、 console.log は無制限の数の引数を取ることができるため、適切な方法は次のようになることに注意してください。
var l = function () {
console.log.apply(console, arguments);
}