7

自己とこれの異なる値を取得する理由を誰か説明できますか? self は this への参照です。

function Parent(){
   var self = this;
   this.func = function(){
      // self.a is undefined
      // this.a is 'Test'
      console.log(self.a, this.a);
   }
}

function Child(x){
   this.a = x;
}

Child.prototype.__proto__ = new Parent;
var ch = new Child('Test');
ch.func();

プロジェクトで self を使用してきましたが、この問題は初めてです。

4

4 に答える 4

9

これはself、のインスタンスを参照しているが、のインスタンスParentのみがプロパティをChild持っているためです。a

function Parent(){
   var self = this; // this is an instance of Parent
   this.func = function(){
      console.log(self.a, this.a);
   }
}

function Child(x){
    this.a = x; // Instances of Child have an `a` property
}

Child.prototype.__proto__ = new Parent;
var ch = new Child('Test');

ch.func(); // Method called in context of instance of Child

したがって、のインスタンスを呼び出すときfuncは、そのインスタンスChildthis参照します。そのためthis.a、内に正しい値が表示されfuncます。

于 2013-02-25T09:34:06.610 に答える
1

functhisは、 のインスタンスを参照しますChild

Child.prototype.__proto__ = new Parent;

のプロトタイプはChildのインスタンスに設定されますParent。したがって、ch.func()が呼び出されるとfunc()、 のプロトタイプ チェーン上にありますが、 のインスタンスであるChildのコンテキストで呼び出されます。chChild

selfParent属性を持たないインスタンスをまだ参照していますa

さらに説明すると、次のようになります。

var p = new Parent();

// this.a is undefined because this is an instance of Parent
p.func(); // undefined undefined
于 2013-02-25T09:43:28.700 に答える