これらは、tuts-premiumJqueryvidチュートリアルから取得されます。
http://tutsplus.com/lesson/the-this-keyword/
ジェフは、「これ」が毎回何を指しているのかを説明していますが、それらすべての背後にある理由を理解したかどうかはわかりません。
例1
function doSomething(e) {
e.preventDefault();
console.log(this);
}
$('a').on('click', doSomething);
この場合、「これは「a」要素を参照します」(この場合は親オブジェクトです)
これは、ここでのステートメントが次のように等しいためだと思います。
$('a').on('click', function (e) {
e.preventDefault();
console.log(this);
}
したがって、「a」は親オブジェクトです
例2
var obj = {
doIt: function(e){
e.preventDefault();
console.log(this);
}
}
$('a').on('click', obj.doIt);
この場合、「これはまだ「a」要素を参照しています」(*しかし、明らかにそれは親オブジェクトではありませんか?)
今回はメソッドを呼び出しているようですが、ステートメントはまだEg1と同じものに相当します。
*チュートリアルの1つで、少し混乱しています。「this」は常に親オブジェクトを参照していると思ったので、この場合は「a」が引き続き親オブジェクトです。しかし(チュートリアルの05.23で)彼はそうではないと推測し、「この」がその親オブジェクトである「obj」を参照するようにしたい場合があり、その場合はeg3を作成します。
例3
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt();
};
e.preventDefault();
この場合、「これはobjオブジェクトを参照します」
このステートメントは次のように等しいので、'this'は入れ子関数にあるという事実でこれを推測します:
$('a').on('click', function(){
function(){ console.log(this);}
};
e.preventDefault();
しかし、特に入れ子関数で「これ」が「道に迷い、ヘッドオブジェクト(ウィンドウオブジェクト)を参照する」という記事を読んだとき、その理由はよくわかりません。
Eg4
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt.call(this);
e.preventDefault();
});
この場合、「これは「a」を指します」
Javascript Definitive Guideによると、「両方のcall()の最初の引数は、関数が呼び出されるオブジェクトです」ここでは、「this」が最初の引数として使用されます。しかし、「これ」は関数が呼び出されるオブジェクトではありませんか?
関数の呼び出しは、関数を呼び出し、その最初のパラメーターを別のオブジェクトへのポインターとして使用するためにあると思いますが、「this」を使用すると、関数が「a」によって呼び出されることを意味します。他のcall()の例でも見たものではありません。
そのような巨大な投稿でごめんなさい。うまくいけば、誰かがこの段階でまだ読んでいる…</ p>