2009-09-08 40 views
2

我在javascript中編寫了一些對象(我猜是類)。 B類繼承自A類.A類有一個名爲isValid的方法,而B類覆蓋該方法。我現在用的是YUI擴展功能,具有B類延長A級javascript中的超類方法

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函數中的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

自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); 
}; 

不爲你工作?第四行應該調用Class1的(超類)testMethod。

+0

我會盡力的,謝謝! – Zoidberg 2009-09-08 18:42:30

+0

工作很好......並且使得很有意義,我應該基於構造方法實現它。謝謝! – Zoidberg 2009-09-08 19:09:16

+0

我們可以在這裏使用'this'而不是完整的類名嗎? – TEXHIK 2016-03-04 12:58:15

0

我張貼另一種方法爲文檔的目的。

如果formControllermessageFormController導出,你叫super.setView爲:

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