2014-04-16 34 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()} 

希望可以帮到