0

ここで、オブジェクトのメンバー関数内の自己実行コード (window/globalScope) で「this」が異なるのはなぜですか?

foo = "Window_foo"
var myobj = {
  foo: 'Object_bar',
  func: function(){
    var self = this;
    console.log("outer this.foo " + this.foo);
    console.log("outer self.foo " + self.foo);
    (function(){
       console.log("inner this.foo " + this.foo);
       console.log("inner self.foo " + self.foo);
    }());
  }
}
myobj.func();

以下の出力が得られます。

outer this.foo Object_bar
outer self.foo Object_bar
inner this.foo Window_foo
inner self.foo Object_bar

func は myObj オブジェクトのメンバー関数です。その中の「this」は myObj オブジェクトでなければなりません。それでは、その内部の自己実行関数は、ウィンドウオブジェクトとして「this」をどのように持っていますか?

4

2 に答える 2

3

自己実行関数は、オブジェクトthisのメソッド内にある場合でも、 window オブジェクトを の値として持ちます。

于 2015-03-09T15:37:10.393 に答える
0

シングルトン オブジェクトの要素を自己参照します。次のようなオブジェクトを作成した後、関数を宣言できます

foo = "Window_foo"
var myobj = {
  foo: 'Object_bar'
}

  myobj.func: function(){
    console.log("outer myobj.foo " + myobj.foo);
    console.log("outer myobj.foo " + myobj.foo);
    (function(){
       console.log("inner myobj.foo " + myobj.foo);
       console.log("inner myobj.foo " + myobj.foo);
    }());
  }
于 2015-03-09T15:35:34.833 に答える