0

この Javascript コードは、ネストされた関数 (コンストラクター内にネストされている) 内で「this」キーワードを使用しています。

o=new MyCtor();
for (var p in o) {
  print(p);
  print(o[p]);
}
function MyCtor() {
  this.a=1;
  var instance=this;
  nested();
  function nested() {
    this.b=2;
    instance.c=3;
  }
}

結果は次のとおりです。

a
1
c
3

print() は、ブラウザーで alert() のように出力を画面にダンプするだけであることに注意してください (ブラウザー内ではなく、スタンドアロンの Spidermonkey でテストしています)。プロパティ「b」は「this.b」では作成できないことに注意してください。

コンストラクター内のネストされた関数で「this」が何を参照しているのか疑問に思っていますか?

4

2 に答える 2

2

関数を直接 (オブジェクト プロパティとしてではなく) 呼び出しているため、newキーワードなしで ( Web ブラウザー、ノードなどで)thisが既定のオブジェクトになります。windowglobal

jsfiddleでライブ デモを参照してください。

于 2012-06-20T12:53:44.493 に答える
0

ウィンドウを指します。このフィドルを実行してコンソールを開いて確認してください: http://jsfiddle.net/sveinatle/9brLj/

于 2012-06-20T12:55:58.610 に答える