美文网首页
2018-11-28

2018-11-28

作者: kathyever | 来源:发表于2018-11-28 16:20 被阅读0次

6.3.5 寄生式继承

寄生式继承的思路与寄生构造函数和工厂模式类似。即创建一个仅用于封装继承过程的函数。该函数在内部以某种方式来增强对象,最后再像真的是它做了所有工作一样返回对象。
以下代码示范了寄生式继承模式:

function createAnother(original){
    var clone=Object(original);//通过调用函数创建一个新对象
    clone.sayHi=function(){//以某种方式来增强这个对象
        alert("hi");
    };
    return clone;//返回这个对象
}
var person={
      name:"kathy",
       friends:["Rainbow","Payne"],
};
var anotherPerson=createAnother(person);
anotherPerson.sayHi();//HI

例子中的代码基于person返回了一个新对象——anotherPerson。新对象不仅具有person的所有属性,而且还有自己的sayHi()方法。

6.3.5 寄生组合式继承

组合继承是Javascript最常用的继承模式;不过它也有自己的不足。

组合继承最大的问题就是无论什么情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。

组合继承的例子:

function SuperType(name){
    this.name = name;
    this.colors=["red","blue","green"];
}
SuperType.prototype.sayName = function(){
     alert(this.name);
};
function SubType(name,age){
    SuperType.call(this.name);// 第二次调用SuperType()
    this.age = age;
}

SubType.prototype = new SuperType();// 第一次调用SuperType()
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
        alert(this.age);
};

相关文章

网友评论

      本文标题:2018-11-28

      本文链接:https://www.haomeiwen.com/subject/phbaqqtx.html