JavaScript寄生组合式继承原理与用法分析

 更新时间:2019年01月11日 11:26:08   作者:saberVIII  
这篇文章主要介绍了JavaScript寄生组合式继承,结合实例形式分析了javascript寄生组合式继承的原理、定义与简单使用方法,需要的朋友可以参考下

本文实例讲述了JavaScript寄生组合式继承。分享给大家供大家参考,具体如下:

寄生组合式继承

寄生组合式继承,就是通过伪造对象来继承属性,通过原型链的混成形式来继承方法。

这种技术的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,因为我们所需要的只是超类型原型的一个副本而已(这一点正是组合继承的问题,并且正是JavaScript这种原型式语言的强大之处,直接copy对象-原型对象)。本质上,就是使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型的原型。

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", "blue", "green"];
}
SuperType.prototype.sayName = function(){
  console.log(this.name);
}
function SubType(name, age){
  //继承属性
  SuperType.call(this, name);
  //实例属性
  this.age = age;
}
//继承方法
inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function(){
  console.log(this.age);
};
var instance1 = new SubType("Nicholas", 29);
instance1.colors.push("black");
console.log(instance1.colors); //"red, blue, green, black"
instance1.sayName();      //"Nicholas"
instance1.sayAge();      //29

这里使用在线HTML/CSS/JavaScript代码运行工具http://tools.jb51.net/code/HtmlJsRun测试上述代码,可得如下运行结果:

这个是寄生组合式继承的最简单形式。这个函数接收两个参数:

1. 子类型构造函数
2. 超类型构造函数

在函数内部,寄生组合式继承最简形式分为3个步骤:

1. 创建超类型原型副本;
2. 为创建的副本指定constructor属性,从而弥补因为重写SubType原型而失去的默认的constructor属性,这个原型副本的constructor属性变化:SuperType –> SubType;
3. 将该完善好的副本赋值给子类型的原型。

寄生组合式继承的图解如下:

寄生组合式继承的高效率体现在它只调用了一次SuperType构造函数,并且因此避免了在SubType.prototype上面创建不必要的,多余的属性。与此同时,原型链还能保持不变。

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • JS原形与原型链深入详解

    JS原形与原型链深入详解

    这篇文章主要介绍了JS原形与原型链,结合实例形式深入分析了JS原型链、继承、组合继承等相关原理、操作技巧及注意事项,需要的朋友可以参考下
    2020-05-05
  • js自动滑动+鼠标滑动区域

    js自动滑动+鼠标滑动区域

    js自动滑动+鼠标滑动区域...
    2007-08-08
  • 跟我学习javascript的异步脚本加载

    跟我学习javascript的异步脚本加载

    跟我学习javascript的异步脚本加载,告诉大家如何使自己的站点更快捷,以及最简单的方法 利用什么样的工具达到预期效果,想一探究竟的朋友可以参考一下这篇文章。
    2015-11-11
  • JavaScript 不支持 indexof 该如何解决

    JavaScript 不支持 indexof 该如何解决

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。本文给大家介绍ie8 不支持 indexof 的解决方法
    2016-03-03
  • ES6入门教程之let和const命令详解

    ES6入门教程之let和const命令详解

    最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉。通过学习网上的教程后觉着有必要整理下遇到的let和const命令,所以这篇文章主要给大家介绍了ES6中let和const命令的相关资料,需要的朋友可以参考下。
    2017-05-05
  • js使下拉列表框可编辑不止是选择

    js使下拉列表框可编辑不止是选择

    下拉列表框默认情况下是不可编辑的,下面为大家介绍个不错的方法可以使下拉列表框可编辑,具体实现如下,需要的朋友可以参考下
    2013-12-12
  • 原生js轮播特效

    原生js轮播特效

    这篇文章主要为大家详细介绍了原生js轮播特效,简单实用的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 前端高频面试题之JS中堆和栈的区别和浏览器的垃圾回收机制

    前端高频面试题之JS中堆和栈的区别和浏览器的垃圾回收机制

    本文给大家分享前端高频面试题JS中堆和栈的区别和浏览器的垃圾回收机制,本文分文别类给大家介绍了栈(stack)和堆(heap)的区别基本类型和引用类型的相关知识,浏览器垃圾回收机制包括基本概念给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • 小程序绑定用户方案优化小结

    小程序绑定用户方案优化小结

    这篇文章主要介绍了小程序绑定用户方案优化小结,该类小程序在使用之前就需要绑定用户信息。常见于线下门店类功能性小程序。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • JS判断变量是否为空判断是否null

    JS判断变量是否为空判断是否null

    本节主要介绍了JS判断变量是否为空是否null的方法,需要的朋友可以参考下
    2014-07-07

最新评论