2014-04-16 32 views
0

假設在JavaScript中,我有一類人,另一個班的孩子(請不要殺我使用這個詞類)多(???)繼承在Javascript

function Human(name){ 
    this.name=name; 
} 

function Child(age){ 
    this.age=age; 
} 

我可以創造人類的目標如:

var h=new Human('MyName') 

和兒童的目標爲:

var c=new Child(10) 

我還可以做的繼承者:

var ih=Object.create(h) 

繼承/複製創建的對象h。

但是,有什麼辦法可以創建一個對象Child並讓它繼承Human類。即我的對象應具有HumanChild屬性。就Javascript而言,我相信這聽起來像是多重繼承。有沒有辦法做到這一點?

+0

你的意思是'Ch ild'必須繼承'Human'? – thefourtheye

+1

爲了更好地理解JavaScript中的繼承如何工作,我建議閱讀以下文章:https://alexsexton.com/blog/2013/04/understanding-javascript-inheritance/。 – VisioN

+1

JavaScript是「單一繼承」,只要每個解析屬性級別只查找一個[原型]對象。因此,只能在JavaScript中模擬MI(例如「複製屬性」,就像在Scala中模擬特質一樣),而不必完全重新創建調度機制。 – user2864740

回答

0

只能有一個原型,但你可以混合對象,如下面的代碼:

function Human(name){ ... } 

function NoiseSource(decibel){ ... } 

function Child(age){ ... } 

var dave = new Child(3); 
$.extend(dave, new Human("Dave")); 
$.extend(dave, new NoiseSource(120)); 

但你比如說你不需要它,因爲你需要爲兒童單人父類,可以通過定期的原型繼承來實現。

0

上一個stackoverflow問題: Good Example of JavaScript's Prototype-Based Inheritance

尼斯的Java/JavaScript的並排端代碼對比在這裏: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model

我建議(你的情況使用this.base):

function Human(name){ 
     this.name=name; 
    } 

    function Child(age){ 
     this.base = Human; 
     this.age=age; 
    } 

var myChild = new Child(5) // 5 yr old 
myChild.name = 'Harry'; 
console.log(myChild); 

,在Firefox的控制檯爲:

Child { age=5, name="Harry", base=Human()} 

希望可以幫到