thisは要素、$(this)その要素で構築されたjQueryオブジェクト
$(".class").each(function(){
//the iterations current html element
//the classic JavaScript API is exposed here (such as .innerHTML and .appendChild)
var HTMLElement = this;
//the current HTML element is passed to the jQuery constructor
//the jQuery API is exposed here (such as .html() and .append())
var jQueryObject = $(this);
});
より深く見える
thisMDNは実行コンテキストに含まれています
スコープは、現在の実行コンテキストECMAを参照します。を理解thisするには、JavaScriptで実行コンテキストがどのように動作するかを理解することが重要です。
実行コンテキストはこれをバインドします
コントロールが実行コンテキストに入ると(コードはそのスコープで実行されます)、変数の環境が設定されます(字句および変数環境-基本的に、これにより、すでにアクセス可能な変数が入る領域と、ローカル変数が入る領域が設定されます格納)、およびのバインディングがthis発生します。
jQueryはこれをバインドします
実行コンテキストは論理スタックを形成します。その結果、スタックのより深いコンテキストは以前の変数にアクセスできますが、それらのバインディングが変更された可能性があります。jQueryがコールバック関数を呼び出すたびに、applyMDNを使用してthisバインディングを変更します。
callback.apply( obj[ i ] )//where obj[i] is the current element
呼び出しの結果はapplyつまり、jQueryのコールバック関数の内部のthis現在の要素を意味するコールバック関数によって使用されています。
たとえば、では.each、一般的に使用されるコールバック関数でを使用できます.each(function(index,element){/*scope*/})。その範囲でthis == elementは、本当です。
jQueryコールバックは、apply関数を使用して、呼び出される関数を現在の要素にバインドします。この要素は、jQueryオブジェクトの要素配列から取得されます。構築された各jQueryオブジェクトには、jQueryオブジェクトのインスタンス化に使用されたセレクターjQuery APIに一致する要素の配列が含まれています。
$(selector)jQuery関数を呼び出します(これ$はjQuery、コード:への参照であることを忘れないでくださいwindow.jQuery = window.$ = jQuery;)。内部的には、jQuery関数は関数オブジェクトをインスタンス化します。したがって、すぐには明らかではないかもしれませんが、$()内部的にを使用していnew jQuery()ます。このjQueryオブジェクトの構築の一部は、セレクターのすべての一致を見つけることです。コンストラクタは、html文字列と要素も受け入れます。jQueryコンストラクターに渡すときはthis、で構築されるjQueryオブジェクトの現在の要素を渡します。jQueryオブジェクトには、セレクターに一致するDOM要素の配列のような構造(またはの場合は単一の要素this)が含まれます。
jQueryオブジェクトが構築されると、jQuery APIが公開されます。jQuery API関数が呼び出されると、この配列のような構造を内部的に反復します。配列内の各項目について、APIのコールバック関数を呼び出し、コールバックをthis現在の要素にバインドします。この呼び出しobjは、上記のコードスニペットで確認できます。は、配列のような構造iで、現在の要素の配列内の位置に使用される反復子です。