2

私はJavaScriptでいくつかのオブジェクト(私が推測するクラス)を書いています。クラス B はクラス A を継承します。クラス A には isValid というメソッドがあり、クラス B はそのメソッドをオーバーライドします。YUI 拡張機能を使用して、クラス B がクラス A を拡張するようにしています。

A = function(){
}
A.prototype = {
   isValid:function(){
       /* Some logic */
       return booleanValue;
   }
}

B = function(){
}

YAHOO.lang.extend(B, A,{
     isValid:function(){
        // call class A's valid function
        // some more logic for class B.
        return booleanValue;
     }
});

私ができるようにしたいのは、クラス B の isValid 関数内でクラス A の isValid 関数を呼び出すことです。問題は、クラス B の isValid メソッドからクラス A の isValid メソッドにアクセスできるかどうかです。次の行を使用して、クラス B のコンストラクター内からクラス A のコンストラクターにアクセスできることを知っています。

this.constructor.superclass.constructor.call(this,someParam);

メソッドについても同様のことが可能ですか?そうでない場合、これを行うための良い方法は何ですか? 現在、スーパークラスの isValid メソッド内で呼び出されるヘルパー メソッドを作成しています。

A.prototype = {
    a_isValid:function(){
       // class A's is valid logic
       return booelanValue;
    },
    isValid:function() {return this.a_isValid();}
}

次に、クラス B から a_isValid 関数を呼び出すことができます。これは機能しますが、可能であれば、スーパー クラスの isValid 関数を直接呼び出すことをお勧めします。

4

2 に答える 2

2

YUI ドキュメントから:

YAHOO.lang.extend(YAHOO.test.Class2, YAHOO.test.Class1); 
YAHOO.test.Class2.prototype.testMethod = function(info) { 
// chain the method 
YAHOO.test.Class2.superclass.testMethod.call(this, info); 
alert("Class2: " + info); 
}; 

うまくいきませんか?4 行目は、Class1 の (スーパークラス) testMethod を呼び出す必要があります。

于 2009-09-08T18:39:25.987 に答える
0

ドキュメントの目的で別のアプローチを投稿しています。

messageFormControllerから派生した場合、次のformControllerように呼び出しますsuper.setView

messageFormController.setView = function setView(element) {
    formController.setView.bind(this)(element);
    // Additional stuff
};
于 2012-09-04T15:48:06.330 に答える