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程序设计有所帮助。

相关文章

  • layer ui 导入文件之前传入数据的实例

    layer ui 导入文件之前传入数据的实例

    今天小编就为大家分享一篇layer ui 导入文件之前传入数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 使用js验证hash,content hash , chunk hash的区别解析

    使用js验证hash,content hash , chunk hash的区别解

    crypto-js是一个JavaScript加密算法库,用于实现各种加密算法和哈希函数,它提供了一种简单而强大的方式来执行加密操作,包括对称加密算法、非对称加密算法和哈希函数等,本文给大家介绍使用js验证hash,content hash , chunk hash的区别解析,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • javascript与CSS复习(三)

    javascript与CSS复习(三)

    呵呵,又弄成了三部曲,这是最后一部分,关于鼠标和浏览器本身显示上的一些属性。
    2010-06-06
  • JS 中数组的增删改查和对象的增删改查实例详解

    JS 中数组的增删改查和对象的增删改查实例详解

    这篇文章主要介绍了JS 中数组的增删改查和对象的增删改查实例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • js chrome浏览器判断代码

    js chrome浏览器判断代码

    今天发现chrome还是有一些独一无二的东西,基于它们,我们就可以搞出基于特征的判定了。
    2010-03-03
  • js获取图片base64的正确实现方式

    js获取图片base64的正确实现方式

    这篇文章主要给大家介绍了关于js获取图片base64的正确实现方式,BLOB是二进制大对象,是一个可以存储二进制文件的容器, 在计算机中BLOB常常是数据库中用来存储二进制文件的字段类型,需要的朋友可以参考下
    2024-01-01
  • 使用JavaScript修改浏览器URL地址栏的实现代码

    使用JavaScript修改浏览器URL地址栏的实现代码

    这篇文章主要介绍了如何使用JavaScript修改浏览器URL地址栏,需要的朋友可以参考下
    2013-10-10
  • ES6使用新特性Proxy实现的数据绑定功能实例

    ES6使用新特性Proxy实现的数据绑定功能实例

    这篇文章主要介绍了ES6使用新特性Proxy实现的数据绑定功能,结合具体实例形式分析了ES6使用Proxy实现数据绑定具体原理、操作步骤与相关注意事项,需要的朋友可以参考下
    2020-05-05
  • 详解微信小程序的 request 封装示例

    详解微信小程序的 request 封装示例

    这篇文章主要介绍了详解微信小程序的 request 封装示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • JS中锚点链接点击平滑滚动并自由调整到顶部位置

    JS中锚点链接点击平滑滚动并自由调整到顶部位置

    这篇文章主要介绍了JS中锚点链接点击平滑滚动并自由调整到顶部位置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论