0

次のように、javascript で 2 つのクラスを定義しました。

function ParentClass(){
    this.one = function(){
      alert('inside one of parent');
    };

    this.two = function(){
       alert('inside two of parent');
       //this is just a skeleton of the actual FB.api implementation in my code
       FB.api('/me', 'post', function(response){
        this.one();
      });

    };

}

function ChildClass(){
    ParentClass.call(this);

    //overriding the one() in ParentClass
    this.one = function(){
      alert('inside one of child');
    };
}


ChildClass.prototype = new ParentClass();
ChildClass.prototype.constructor = ChildClass;
var c = new ChildClass();
c.two(); 

the last line calls the ParentClass's two() method which then calls the one() method overriden by the ChildCLass.

「this.one() が定義されていません」というエラーが表示されます。しかし、 this.one() メソッドを FB.api 応答ブロックの外に置くと、関数は完全に呼び出されます。問題は、this.one() の「this」が ChildClass ではなく FB.api コールバック関数を参照していることだと思います。これを解決するにはどうすればよいですか?

4

1 に答える 1

2

thisFB 呼び出しの外側の別の変数にのコピーを格納するだけです。

this.two = function(){
   alert('inside two of parent');
   //this is just a skeleton of the actual FB.api implementation in my code
   var self = this;
   FB.api('/me', 'post', function(response){
    self.one();
  });

};
于 2012-05-17T14:22:00.167 に答える