javascript组合式继承与寄生组合式继承

javascript组合式继承与寄生组合式继承

javascript组合式继承

组合继承式javascript最常见的继承模式;不过他也有自己的不足。组合继承最大的问题就是无论在什么情况下都会调用两次超类型构造函数: 一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。

function SuperType (name) {
    this.name = name;
    this.colors = ["red", "yellow", "blue"];
}

SuperType.prototype.sayName = function () {
    console.log(this.name);
};

function SubType (name, time) {
    SuperType.call(this, name); // 第二次调用 SuperType

    this.time = time;
}

SubType.prototype = new SuperType(); // 第一次调用SuperType
SubType.prototype.constructor = SubType;
SubType.prototype.sayTime = function () {
    console.log(this.time);
}

寄生组合式继承

寄生组合式继承, 通过借用构造函数来继承属性,通过原型链对的混成形式来继承方法。其基本思路是: 不必为了指定子类型的原型而调用超类型的构造函数,我们所需要的无非就是超类型原型的一个副本而已。

function inheritPrototype (subType, superType) {
    var prototype = Object.create(superType.prototype); // 创建对象
    prototype.constructor = subType; // 增强对象
    subType.prototype = prototype; // 指定对象
}

function SuperType (name) {
    this.name = name;
    this.colors = ["red", "yellow", "blue"];
}

SuperType.prototype.sayName = function () {
    console.log(this.name);
};

function SubType (name, time) {
    SuperType.call(this, name);

    this.time = time;
}

inheritPrototype(SubType, SuperType);

SubType.prototype.sayTime = function () {
    console.log(this.time);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值