2
(function(value) {
    this.value = value;
    $('.some-elements').each(function(elt){
        elt.innerHTML = this.value;        // possibly undefined (Why?)
    });
})(2);

上記のコードの「this」の値を誰か説明できますか?

私の理解:

this.value = value // Line 2- ここではこれはグローバル オブジェクトを参照しています elt.innerHTML = this.value; // line 4- なぜこれが「おそらく」未定義なのですか。説明してください。

編集:ところで、これの「これ」の説明を徹底的に読みました(「この」キーワードはどのように機能しますか?)投稿(上記のコードを取得した場所から)

4

3 に答える 3

3

コールバックとして.each()メソッドに送信される関数内ではthis、DOM 要素 (jQuery オブジェクトにラップされたこのコレクション内の各要素) を参照しますwindow

さらに重要なことに、コールバックは現在の DOM 要素のコンテキストで起動されるため、キーワードthisは要素を参照します。

(ところで、それはそのelt引数を少し冗長にします。少なくとも、なぜ両方を使用し、そこで同じものを参照するのかは少し不明thisですelt

ただし、すべての DOM 要素にプロパティが定義されているわけではありません。これは、value要素のサブセットに対してのみ設定されています: inputselect、など。それがおそらく結果として得られる理由です。textareaoptionundefined

これは、 jQuery.proxy()メソッドを使用して簡単に調整できます。

$('.some-elements').each($.proxy(function(elt){
    elt.innerHTML = this.value;
}, this));

に送信される関数は、そのコンテキストとして.each()アウターを使用するthisようになりました (明らかに、DOM 要素を指しているわけでeltはありません)。

于 2013-04-30T16:51:11.417 に答える
1

4 行目でthis.valueは、 の「各」インスタンスを参照しています$('.some-elements')。関数内では、関数が操作しているオブジェクトを参照します。無名関数の場合は、グローバル スコープです。

于 2013-04-30T16:52:08.390 に答える