javascript中的超类方法

时间:2009-09-08 18:27:56

标签: javascript yui yui2

我正在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函数中调用Class A的isValid函数。问题是,我可以从B类的isValid方法访问A类的isValid方法吗?我知道您可以使用以下行

从Class 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函数。

2 个答案:

答案 0 :(得分:2)

来自YUI docs:

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。

答案 1 :(得分:0)

我发布了另一种用于文档编制的方法。

如果messageFormController派生formController,请致电super.setView

messageFormController.setView = function setView(element) {
    formController.setView.bind(this)(element);
    // Additional stuff
};