thisは分析を指します
11077 ワード
以前Javaを習ったことがありますが、thisについては大体理解があります。今javascriptの中のthisを見にきて、あの変化はしかしとても多いです。本文は主にいくつかのよく使われている例を紹介します。全体の役割と対象の役割領域に関するものです。
1.thisを現在の対象として最も一般的な用法であり、最も理解しやすいものである。
例えば:
2.javaと同じように、現在のインスタンスを指します。
例えば:
3.現在のオブジェクトの直接量を指します。
例えば:
1.一般関数の呼び出し
注意深い人が発見します。fとはwindow.f()の略字にすぎないので、thisは全体の対象windowを指します。だからalertはalertに相当します。
ここを少し修正して、f()をnew f()に変えます。オブジェクトを具体化します。このとき、thisは現在のインスタンスオブジェクトを指します。
理由はnew演算子を使用して関数f()を実装すると、新しいオブジェクトが作成され、現在のスコープはグローバルスコープではなく、オブジェクトスコープに戻ります。
2.最初の例を比較する
次の例を書き換えます。
変更前:
変形します
まとめ:
1.引用後、再実行し、作用域が変化し、thisが実行の対象を指す。
2.直接呼び出し実行、スコープは変わらず、thisは定義の対象を指します。
1.thisを現在の対象として最も一般的な用法であり、最も理解しやすいものである。
例えば:
1 <input type="button" value=" ?" onclick="this.value=' !'" />
ここでボタンを押すと、thisは現在のこのbuttonオブジェクトを指します。value値はそれに伴って変わる。2.javaと同じように、現在のインスタンスを指します。
例えば:
1 function Person(){
2
3 this.name = " !";
4
5 }
6
7 var f = new Person();
8
9 alert(f.name);
ここのthisは現在のインスタンスオブジェクトを指します。3.現在のオブジェクトの直接量を指します。
例えば:
1 var o = {
2 name:" ",
3
4 me:function(){
5
6 return this;
7
8 }
9
10 }
11
12 var newObj = o.me(); // me , this, o
13
14 alet(newObj.name);
以上は、this対象のスコープです。次のように、いつグローバルスコープが現れるかを示します。1.一般関数の呼び出し
注意深い人が発見します。fとはwindow.f()の略字にすぎないので、thisは全体の対象windowを指します。だからalertはalertに相当します。
ここを少し修正して、f()をnew f()に変えます。オブジェクトを具体化します。このとき、thisは現在のインスタンスオブジェクトを指します。
理由はnew演算子を使用して関数f()を実装すると、新しいオブジェクトが作成され、現在のスコープはグローバルスコープではなく、オブジェクトスコープに戻ります。
2.最初の例を比較する
次の例を書き換えます。
変更前:
<input type="button" value=" ?" onclick="this.value=' !'" />
変更後:<input type="button" value=" ?" onclick="f()" />
<script>
function f(){
this.value = " !";
}
</script>
運転後、ボタンのvalue値が変化していないことが分かります。つまり、ここでは直接関数を呼び出す方法を使って、thisは大域的な作用領域にあります。まだwindowオブジェクトを指しています。変形します
1 <input type="button" value=" ?" />
2
3 <script>
4
5 var btn = document.getElementsByTagName("input").[0];
6
7 btn.onclick = f; // f, f()
8
9 function f(){
10
11 this.value = " !";
12
13 }
14
15 </script>
サプライズが現れました。thisは再び対象のスコープになり、現在のボタンの対象を指します。まとめ:
1.引用後、再実行し、作用域が変化し、thisが実行の対象を指す。
2.直接呼び出し実行、スコープは変わらず、thisは定義の対象を指します。