4

John Resig の inherit.js を使用します。_super()これにより、親の関数を呼び出す便利な関数にアクセスできます。それは素晴らしいことですが、今日私は問題に悩まされていました.これをバインドしたとしても、this._super()a 内から呼び出すことができませんでした:setTimeout

コード例

var Person = Class.extend({
  init: function(isDancing){
  this.dancing = isDancing;
},
    dance: function(){
        return this.dancing;
    }
});

var Ninja = Person.extend({
    init: function(){
        this._super( false );
},
dance: function(){
    window.setTimeout(function(){
        // Call the inherited version of dance()
        return this._super();
    }.bind(this),50);
});

this._super()未定義です!何が起こっている?

4

2 に答える 2

2

これは、醜いClass実装方法を示しています。_superプロパティは、実行中にのみ使用可能になり、dance現在実行中のメソッドに固有である必要があるため、その後は削除 (または復元) されます。「現在の」_super値への参照を取得し、タイムアウトから呼び出す必要があります。要するに:

dance: function(){
    // Call the inherited version of dance()
    window.setTimeout( this._super.bind(this), 50);
}
于 2013-09-26T13:04:58.737 に答える