杂质与原型继承

时间:2013-12-18 21:47:26

标签: javascript

让我们有2个构造函数

bird= function(name){
    this.cry=function(){ alert('cry'); }
    this.name=name;
}
duck= function(){
    this.cry=function(){ alert('cry cry'); }
}
b= new bird('Ivan');
d= duck.call(b);

并考虑原型继承

bird= function(name){
    this.cry=function(){ alert('cry'); }
    this.name=name;
}
duck= function(){
    this.cry=function{ alert('cry cry'); }
}
duck.prototype= new bird('Ivan');

当原型继承比杂质方式更好以及杂质比原型继承更好时,你能得到一个例子。

1 个答案:

答案 0 :(得分:1)

您不应该创建Parent的实例来设置继承的原型部分(使用Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child)。

构造函数应该以Capital(大写字母)开头。

你可以通过在构造函数(第一个例子)函数和Child do Parent.apply(this,arguments);中填充所有内容来继承,但是Child将无法扩展Parent函数,并且它将需要更多的cpu和内存来创建Child和家长。

第二个示例使用原型的方式是错误的,您将共享行为设置为Duck原型(名称成员)上的实例成员(cry函数)和实例特定成员。至于使用原型(如果正确完成)优于您提供的第一个示例:

  1. 您可以在Child中重复使用父函数,并在需要时扩展它们
  2. 它使用更少的内存和更少的CPU来初始化实例,因为原型成员是共享的。
  3. 您可以在创建实例后在原型上添加行为,并让所有现有实例都具有该行为。
  4. 其他JS程序员会更好地理解您的代码,并认为您知道自己在做什么。
  5. 有关构造函数和原型的更多详细信息,请参见here