美文网首页
【面向对象的程序设计(7)】寄生式继承和寄生组合式继承

【面向对象的程序设计(7)】寄生式继承和寄生组合式继承

作者: Wonder233 | 来源:发表于2017-11-17 11:47 被阅读0次

寄生式继承

基本思路

创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真的是它做了所有工作一样返回对象。

function createAnother(original){
    var clone = Object(original);     //通过调用函数创建一个新对象
    clone.sayHi = function(){
        alert("hi");
    }
    return clone;
}

var person = {
    name:"Wonder",
    colors:["blue","green"]
};
var anotherPerson = createAnother(person);
anotherPerson.sayHi();  //"hi"

寄生式继承不能做到函数复用,所以效率降低。

寄生组合式继承

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

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);
};

基本思路

通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。
使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型的原型。

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

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);

    this.age = age;
}

inheritPrototype(SubType,superType);

SubType.prototype.sayAge = function () {
    alert(this.age);
};

优点:高效率——只调用了一次SuperType构造函数,并且因此避免了在SubType.prototype上面创建不必要的、多余的属性。另外,原型链还能保持不变。

寄生组合式继承是引用类型最理想的继承范式。

相关文章

  • Javascript 继承

    参考:JavaScript高级程序设计(第3版) 原型链 原型式继承 寄生式继承 寄生组合式继承

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • js的继承

    面向对象的继承方式有很多种,原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承、深拷贝...

  • JS类的继承

    1.类式继承 构造函数继承 3.组合继承 4.原型继承 5.寄生式继承 6.寄生组合式继承

  • 前端面试题总结【38】:javascript继承的 6 种方法

    原型链继承 借用构造函数继承 组合继承(原型+借用构造) 原型式继承 寄生式继承 寄生组合式继承 推荐: 持续更新...

  • javaScript 实现继承方式

    JavaScript实现继承共6种方式:原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。

  • js的完美继承方式详解

    分为六步,能看完的话,不会你打我 类式继承、构造函数继承、组合继承、原型继承、寄生式继承、寄生组合式继承 困了 安

  • 【面向对象的程序设计(7)】寄生式继承和寄生组合式继承

    寄生式继承 基本思路 创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真的是它做了所有...

  • JavaScript中继承的实现方式---笔记

    继承的几种实现方式:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承;继承的实现,一般有接口...

  • 18-深入拓展原型链模式(六种常用继承方式)

    1. 原型继承 2. call继承 3. 冒充对象继承 4.组合式继承 5. 寄生组合式继承 6. 中间类继承

网友评论

      本文标题:【面向对象的程序设计(7)】寄生式继承和寄生组合式继承

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