2011-10-21 53 views
4

考慮以下JavaScript片段,使用Javascript - 如何初始化超類,如果超類的構造函數採用參數

var SuperClass = function(x){ 
    this.x = x; 
    this.a = 5; 
}; 

var SubClass = function(x){ 
} 

function IntermediateClass(){}; 
IntermediateClass.prototype = SuperClass.prototype; 
SubClass.prototype = new IntermediateClass; 
SubClass.prototype.constructor = SubClass; 

現在,如果我創建子類的實例,對象將不會初始化屬性「一」和「 X」。

var object = new SubClass; 
//object.a == undefined 
//object.x == undefined 

雖然我明白爲什麼會這樣,什麼是子類來執行的超類構造函數中完成初始化的乾淨的方式?

+0

可能的重複[如何獲得一個構造函數從JavaScript中的構造函數繼承?](http://stackoverflow.com/questions/2263353/how-to-get-a-constructor-function-to-繼承java中的構造函數) – outis

回答

4

首先,該代碼中存在一堆錯誤。

這將使SuperClass的IntermediateClass 妹妹

IntermediateClass.prototype = SuperClass.prototype; 

您從來不需要這樣做,constructor就是爲您處理的。

SubClass.prototype.constructor = SubClass; 

也就是說,JavaScript的沒有類。繼承是基於對象的。你不能做你想做的事情。

相反,我會在一個單獨的函數中提取初始化,然後從「子類」中調用它。

一個更好的問題是你想要完成的。您正在嘗試將JavaScript編寫爲Java。不是。

+0

這篇文章http://www.3site.eu/doc/#intermediate解釋了使用IntermediateClass的原因。 – Deepan

相關問題