3

むしろ、JavaScript イベントに関する技術的な質問:

なぜ

window.onmousewheel = console.log;

Uncaught TypeError: Illegal invocationを投げる

window.onmousewheel = function (e) {console.log(e); };

期待どおりに動作し、イベントを文字列として出力しますか? console.logがに割り当てられたときにwindow.onmousewheel、ラムダ式のように 1 つのパラメーターだけで呼び出されないのはなぜですか?

サイモン

4

2 に答える 2

7

関数が明示的な受信者なしで呼び出されると、受信者はwindow(またはより一般的にはグローバル オブジェクト) またはundefined厳密性に依存します。によって参照される関数console.logは、そのthis値が のインスタンスである必要がありますConsole

これは通常、ユーザー コードでは行われませんが、一般的な呼び出しからメソッドを保護することもできます。

MyClass.prototype.method = function() {
    if( !( this instanceof MyClass ) ) {
        throw new Error("Invalid invocation");
    }
};
于 2013-07-29T17:42:35.707 に答える
3

それはすべての範囲に関係していますconsole.log

次のこと行う必要があります。

window.onmousewheel = console.log.bind(console);

于 2013-07-29T17:41:54.323 に答える