thisは分析を指します

11077 ワード

以前Javaを習ったことがありますが、thisについては大体理解があります。今javascriptの中の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は定義の対象を指します。