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 回答