私は現在JavaScriptを学んでおり、オブジェクト、特に「this」キーワードを理解するのに苦労しています。私は W3schools のチュートリアルを読み、YouTube を検索しました。誰かが JavaScript で「これ」に関する優れたチュートリアルを提供してくれたらと思います。
2 に答える
Function.prototype.bind
ES5 で導入されたを無視this
すると、関数の呼び出し方法によって の値が設定されます。
関数が修飾されていない識別子で呼び出された場合、たとえば
foo();
次に、関数に入ると、this
ですundefined
。非厳密モードではグローバル オブジェクト (ブラウザのウィンドウ) に設定され、厳密モードでは のままになりますundefined
。
関数がオブジェクトのメソッドとして呼び出される場合、たとえば
someObj.foo();
次に、そのthis
オブジェクトに設定されます。
new
演算子を使用して関数を呼び出すとthis
、 によって作成されたかのように作成された新しいオブジェクトに設定されnew Object()
ます。
function Foo(name) {
this.name = name; // this references a new Object
}
関数が または のいずれcall
かapply
を使用して呼び出された場合this
、非厳密モードでは任意のオブジェクトに設定でき、厳密モードでは任意の値 (null も含む) に設定できます。
したがってthis
、実行コンテキスト、スコープ、またはその他とは何の関係もありません。これは、関数がどのように呼び出されるか、または を使用して値がどのように設定されるかに完全に関連していますbind
。
this
リスナーに関しては、ここで回答されています: onClick Function "this" Returns Window Object
動的にアタッチされたリスナーも同様ですが、リスナーのアタッチに関する記事で扱われている古い IE で対処すべき癖があります。
this
はちょっと難しいトピックです。this
現在内部で作業している関数の「所有者」を指します。それがどのようなコンテキストまたはスコープthis
にあるかに応じて、いくつかの異なることを意味する可能性があります。window
通常、これは、ほとんどの JavaScript 変数を追跡し、いくつかの関数を含むオブジェクトを指します。これは、特に明示的に定義されていない限り、すべての JavaScript 関数 (および変数) の所有者がwindow
. つまり、次のことが当てはまります。
<script type="text/javascript">
var something = "Hey";
this.something === something; //these will evaluate to true, because when you
window.something === something; //declared the variable `something`, it was assigned
this === window; //to the window object behind the scenes.
</script>
ただし、常に を参照するとは限りませんwindow
。イベント ハンドラー内では、this
通常element
、イベントをトリガーした を参照します。イベント ハンドラーについて詳しく説明するつもりはありませんが、 を使用した例を次に示しjQuery
ます。補足 -- jQuery の詳細を学びます。
HTML:
<div id="myDiv"></div>
Javascript:
<script type="text/javascript">
$('#myDiv').bind("click",function() {
$(this).css("visibility","hidden");
});
</script>
この例でthis
は、トップ ボックスの html 要素を参照します。これ$()
は、要素の jQuery オブジェクトを作成するための構文であるためです。関数を使用できるようにこれを行いましたが、次のcss
ようなことも簡単に行うことができましたthis.style.visibility = "hidden";
上記の例で要素を参照した理由this
は、舞台裏で jQuery のbind
メソッドが次のようなことを行っているためです。
var ele = document.getElementById("myDiv");
ele.onclick = function(){ //the same function as above, but with all the
//behind-the scenes stuff that jquery does to create a jQuery
//object
};
関数を に割り当てているため、ele.onclick
関数は要素 に「属している」ことに注意してくださいele
。したがって、その関数内では、this
を参照する必要がありele
ます。
もし私が省略したことで、あなたがまだよく理解していないことがあれば、私に知らせてください。