1

jQuery ToolTip プラグイン (以下、Tooltip) のコードを調べていると、よくわからない動作に気づきました。

ツールチップは、次のようにマウスオーバー機能をバインドします。

.mouseover(save)

この方法で呼び出すと、this変数はHtmlDivElement.

をこれに変更してみmouseoverました:

.mouseover(function(e){save(event)})

私はMouseEventを探しているので。ただし、現在、this変数はWindowです。

これをベイパスして、次HtmlDivElementのコード行を使用して取得する方法を見つけました。

.mouseover(function(e){save(this, event)})

this関数内の代わりとして使用しthisます。

私の質問はsave、マウスオーバーバインディング内の無名関数内で呼び出されると、関数がスコープを失うのはなぜですか?

4

1 に答える 1

1

の値はthis、関数呼び出しごとに確立されます。匿名関数がその「保存」関数を呼び出すとき、何をすべきかを確立するために何もしていないthisため、デフォルト値であるグローバル オブジェクト (「ウィンドウ」) になります。

あなたはこれを行うことができます:

.mouseover(function(e){ save.call(this, e); })

必要thisな値を取得します。ハンドラーのthis値はフレームワークによって配置されるため、使用.call()することで「保存」関数に渡します。

繰り返しますが、JavaScript ではthis、コードの静的構造によって決定されません。代わりに、個々の関数呼び出しの状況に依存します。つまり、関数がどのように宣言されているかに関係なく、this任意の関数呼び出しで の値が完全に驚くべきものになる可能性があります。

于 2012-08-20T14:04:33.210 に答える