2

サブオブジェクト「object3」から「object1」のプロパティを呼び出す必要がありますが、「this」キーワードが「object1」ではなく「object2」で参照されているため、この例は機能しません。これを行う方法を知っていますか?

function object1() {
   this.a = "hello world";

   this.object2 = function() {
      this.object3 = function() {
         alert(this.a); //prints "undefined"
      }
  };
}

この例を次のように試してください。

var obj1 = new object1();
var obj2 = new obj1.object2();
obj2.object3();

前もって感謝します :-)

4

2 に答える 2

1
function object1() {
    this.a = "hello world";
    var self = this;
    this.object2 = function () {
        this.object3 = function () {
            alert(self.a); //prints "undefined"
        }
    };
}
var obj1 = new object1();
var obj2 = new obj1.object2();
obj2.object3();

オブジェクトを保存する必要がありthisます。そうしないとthis、関数this.object3のスコープにアクセスすることになります

于 2013-06-15T08:44:34.870 に答える
0

this範囲が変わると変わります。this新しいスコープの参照を保存する必要があります。

function object1 () {
    var first_scope = this;
    this.a = "hello world";

    this.object2 = function() {
        var second_scope = this;

        this.object3 = function() {
            var third_scope = this;
            alert(first_scope.a);
        }
    };
}
于 2013-06-15T09:00:15.697 に答える