JavaScriptのthis

1838 ワード

thisはJavascript言語のキーワードです.関数が動作する時に自動的に生成される内部オブジェクトを表します.関数の内部でのみ使用できます.例えば、
  function test(){
    this.x = 1;
  }
関数を使う場合によって、thisの値が変わります.しかし、一つの原則があります.つまり、thisとは、関数を呼び出す対象のことです.以下は四つの状況に分けて、thisの使い方を詳しく説明します.
ケース1:純粋な関数呼び出しは、関数の最も一般的な使用法であり、グローバルコールに属しているので、thisはグローバルオブジェクトGlobalを表します.下記のコードを見てください.その結果は1です.
  function test(){
    this.x = 1;
    alert(this.x);
  }
  test(); // 1
thisが全体の対象であることを証明するために、コードを変更します.
  var x = 1;
  function test(){
    alert(this.x);
  }
  test(); // 1
運転結果はまだ1です.もう一回変えます
  var x = 1;
  function test(){
    this.x = 0;
  }
  test();
  alert(x); //0
ケース2:オブジェクトメソッドの呼び出し関数として、あるオブジェクトの方法として呼び出すこともできます.この場合、thisはこの上位オブジェクトを指します.
  function test(){
    alert(this.x);
  }
  var o = {};
  o.x = 1;
  o.m = test;
  o.m(); // 1
状況三は構造関数としていわゆるコンストラクタを呼び出すと、この関数によって新しいオブジェクトを生成します.このとき、thisはこの新しいオブジェクトを指します.
  function test(){
    this.x = 1;
  }
  var o = new test();
  alert(o.x); // 1
運転結果は1です.この時のthisが全体の対象ではないことを示すために、コードを変更します.
  var x = 2;
  function test(){
    this.x = 1;
  }
  var o = new test();
  alert(x); //2
実行結果は2で、グローバル変数xの値はまったく変わっていないことを示しています.
場合4 applyは、関数オブジェクトを呼び出す方法であり、関数を変更する呼び出しオブジェクトとして機能し、最初のパラメータは変更後の呼び出しの対象を表します.したがって、thisとは、この最初のパラメータのことです.
  var x = 0;
  function test(){
    alert(this.x);
  }
  var o={};
  o.x = 1;
  o.m = test;
  o.m.apply(); //0
apply()のパラメータが空の場合は、グローバルオブジェクトをデフォルトで呼び出します.そのため、この場合の運転結果は0で、thisが全体のオブジェクトを指すことを証明しています.最後の行のコードを
  o.m.apply(o); //1
運転結果が1になりました.この時のthisが対象であることが証明されました.(終わり)
作者:阮一峰
原文のリンク:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_同前javascript.
PS:非同期呼び出し関数のthisは、関数実行時の環境に依存します.