7

jQuery.each()ループでは、それthisは と同等だといつも思っていましたvalueOfElement。誰かが違いを説明できますか?

例:

$.each(object, function(i, val){
    $('body').append('<b>valueOfElement:</b> ' + typeof val + ' - ' +  
    '<b>this: </b>' + typeof this + '<br/>');
});

結果:

valueOfElement: string - this: object
valueOfElement: boolean - this: object
valueOfElement: object - this: object

フィドル

4

2 に答える 2

14

答えは、リンク先のドキュメントにあります:

値には this キーワードを使用してアクセスすることもできますが、Javascript は this 値が単純な文字列または数値であっても、常にオブジェクトとしてラップします。

としてアクセスすると、すべての値がオブジェクトに埋め込まれますthis

本当の理由は、jQuery ソースの次の行にあります。

callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {

あなたはそれを比較することができます

(function(){console.log(this)}).call(1);

Numberオブジェクトではないものに対して関数を呼び出すことはできないため、を構築します。

call 関数の MDNから:

thisArg :

これは、メソッドによって表示される実際の値ではない可能性があることに注意してください。メソッドが非厳密モード コードの関数である場合、null および undefined はグローバル オブジェクトに置き換えられ、プリミティブ値はボックス化されます。

this代わりに使用することで見られる唯一の利点は次のvalueOfElementとおりです。

  • シンプルさ: コールバックに渡される引数の順序を覚えておく必要はありません
  • プリミティブ型でthisあっても関数を直接使用する機能valueOfElement
于 2012-10-29T14:15:59.987 に答える
0

キーワードはthis、要素に JavaScript オブジェクトとしてアクセスします。他の JavaScript オブジェクトと同じ方法で値を取得するか、ラップ ( $(this)) して jQuery オブジェクトにすることができます。

于 2012-10-29T14:18:12.480 に答える