美文网首页
寄生组合式继承

寄生组合式继承

作者: 樱木夜访流川枫 | 来源:发表于2018-06-02 23:18 被阅读0次

组合式继承:

function Person3(params) {
    // 私有属性定义
}

// 复用方法定义
Person3.prototype.fn = function() {
  // todo
}

function Man3(params) {
  // 借用构造函数继承父类型实例属性
  Person3.call(this, params);  // 第二次调用

  // 增加对象等
}

// 原型链继承父类型的原型属性和方法
Man3.prototype = new Person();  // 第一次调用

var man3 = new Man3()

组合继承的缺点:会调用两次父类型构造函数,在子类型的原型上创造了不必要的、多余的属性

寄生组合式继承:为了解决组合继承的缺陷

所谓寄生组合式继承,即通过借用构造函数来继承属性,通过原型链继承方法
它的基本思路:不必为了指定子类型的原型而调用父类型的构造函数,我们所需要的仅仅是父类型的原型的一个副本。本质上,使用寄生式继承来继承父类型的原型,再将结果指定给子类型的原型

代码实现:

function Person6(params) {
  // 私有属性定义
}

// 复用方法定义
Person6.prototype.fn = function() {
  // todo
}

function Man6 (params) {
  // 借用构造函数来继承属性
  Person6.call(this, params);

  // 声明自己的私有属性
}

function inheritPrototype(child, parent) {
  var clone = object(parent.prototype);  // 创建对象
  clone.constructor = child;  // 增强对象
  child.prototype = clone;  // 指定对象
}

inheritPrototype(Man6, Person6);

// 子类型定义复用方法
Man6.prototype.fn = function() {
  // todo
}

寄生组合式继承只调用了一次父类型构造函数,因此避免了在子类型的原型上创建不必要的属性。它没有原型链继承、原型式继承存在的引用类型值的原型属性共享问题、子类型实例对象到父类型构造函数的传参问题,也没有借用构造函数存在的函数不复用问题、父类型的原型方法对子类型不可见问题,没有组合继承存在的子类型原型会创建不必要的属性问题,没有寄生式继承存在的函数不复用问题。

相关文章

  • js继承方式

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

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

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

  • javaScript 实现继承方式

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

  • Javascript 继承

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

  • JS类的继承

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

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

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

  • js的完美继承方式详解

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

  • js继承代码学习

    寄生组合式继承是除了class继承外,最好的继承方法,当然也很麻烦。

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

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

  • js继承

    js各种继承方式介绍 1.原型链继承 2.构造继承 3.组合继承 4.寄生继承 5.寄生组合式继承 这种方式的高效...

网友评论

      本文标题:寄生组合式继承

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