ES5实例详解javascript多种继承方式

javascript作为一门轻量级的脚本语言在es6和node.js的横空出世之后将其推向的新的高度,虽然 es6 中出现的新的生成对象的类语法格式,但依然为es5的语法糖,而我们依然有必要从javascript的原生实现入手来了解它的继承实现方式,es6给出了更加简洁的固定的类声明方式。

javascript的继承不同的开发者有不同的理解方式,笔者认为主要分为四种

 - 原型链继承 - 对象冒充继承(构造函数继承 不过我不喜欢这个名字) - 组合继承 - 寄生组合继承

登录后复制

对于继承,可以预先声明一个Animal, 进而讨论不同的继承方式.

    let Animal = (function () {      function Animal (name) {        this.name = name || 'Animal';        this.sleep = function(){          console.log(this.name + '正在睡觉!');        }      }      Animal.prototype.eat = function(food) {        console.log(this.name + '正在吃:' + food);      }      return Animal;    })()

登录后复制

原型链继承

    let Cat = (function () {      function Cat(){       }      Cat.prototype = new Animal();      Cat.prototype.name = 'cat';      return Cat;    })()

登录后复制

原型链是 javascript 的典型继承方式, 这种继承方式的最大特点就是共享,所有事例共享原型对象中的所有属性和方法, 共享是它的最大优点 也是它的最大缺点, 正对我们的不同需求, 比如大多数情况下我们常常需要某些属性是子类特有的  而一些读取属性方法需要共享,--另外此种继承无法向父类传参,无法实现多继承

登录后复制

对象冒充继承

    let Cat = (function () {      function Cat(name){        Animal.call(this,name);      }      return Cat;    })()

登录后复制

对象冒充继承就是简单的利用call或者apply方法实现继承,这种继承最大的特点正好与原型链继承相反不能继承原型属性/方法--非共享(子类自有一份), 同样这是它的优点也是它的缺点, 另外它解决了原型链继承中无法向父类传参的缺点, 并且可以实现某种意义上的多继承--(注意这种多继承是打引号的)

登录后复制

组合继承

立即学习“Java免费学习笔记(深入)”;

    let Cat = (function () {      function Cat(name){        Animal.call(this, name);      }      Cat.prototype = new Animal();      Cat.prototype.constructor = Cat;      return Cat;    })()

登录后复制

组合继承是比较好的继承, 他是原型链继承和对象冒充继承的合体, 合理的利用了这两种组合的特点(是特点不是优点^_^),既是子类的实例,也是父类的实例, 但有一个缺点就是调用了两次父类构造函数,生成了两份实例(子类实例将子类原型上的那份屏蔽了)造成内存浪费. 这也是用的最多的一种

登录后复制

寄生组合继承

    let Cat = (function () {      function Cat(name){        Animal.call(this, name);      }      (function(sub, sup){        var Super = function(){};        Super.prototype = sup.prototype;        sub.prototype = new Super();        sub.prototype.constructor = sub      })(Cat, Animal)      return Cat;    })()

登录后复制

寄生组合继承是对组合继承的基础上的升华, 个人认为是堪称完美的继承方式,改进的组合继承内存浪费的问题^_^

相关推荐:

为什么需要利用javascript实现继承?几种继承方式实例详解

javascript原型链继承方式用法和缺点实例详解

js中的三种继承方式与优缺点

以上就是ES5实例详解javascript多种继承方式的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787567.html

(0)
上一篇 2025年3月8日 18:11:01
下一篇 2025年2月19日 00:06:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在express站点中使用ejs模板引擎实例详解

    本文主要和大家介绍在express站点中使用ejs模板引擎,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 使用 vs创建的express站点,默认使用的是jade模板引擎,但是我不太喜欢这种…

    2025年3月8日
    200
  • 实例讲解js数组最重要使用的方法

    数组作为js中常用的数据类型使我们用的最多的, 在其他地方可以搜索出很多对其方法的总结,本文主要给大家整理了js数组中最重要的常用方法,本次整理的是小编认为大家在使用中最常用也是最重要的方法,一起学习下。希望能帮助到大家。   split(…

    编程技术 2025年3月8日
    200
  • JS不用中间变量temp实现两个变量值得交换实现代码

    本文主要和大家介绍在js中 实现不用中间变量temp 实现两个变量值得交换 ,需要的朋友可以参考下,希望能帮助到大家。 1.使用加减法; var a=1;var b=2;a=a+b;b=a-b;a=a-b; 登录后复制 2.使用乘除法(乘除…

    编程技术 2025年3月8日
    200
  • js面向对象之继承知识详解

    说到这个继承,了解object-oriented的朋友都知道,大多oo语言都有两种,一种是接口继承(只继承方法签名);一种是实现继承(继承实际的方法)本文主要和大家介绍js面向对象之继承的相关知识,以及分享了读者弄明白这个知识点的学习心得,…

    2025年3月8日
    200
  • JavaScript调停者模式实例详解

    本文主要和大家介绍javascript设计模式之调停者模式,详细分析了调停者模式的概念、原理、优缺点并结合javascript实例形式给出了相关使用技巧,需要的朋友可以参考下,希望能帮助到大家。 1、定义 调停者模式包装了一系列对象相互作用…

    2025年3月8日
    200
  • JavaScript求最大公共子串的方法详解

    本文主要和大家介绍javascript实现求最大公共子串的方法,涉及javascript针对字符串的遍历、匹配、运算等相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 求最大公共子串,常见的做法是使用矩阵。假设有字符串:abcdefg…

    编程技术 2025年3月8日
    200
  • Node.js实现mysql连接池使用事务自动回收连接的方法

    本文主要和大家介绍node.js实现mysql连接池使用事务自动回收连接的方法,结合实例形式分析了node.js操作mysql连接池实现基于事务的连接回收操作相关技巧,需要的朋友可以参考下,希望能帮助到大家。 本文实例讲述了Node.js实…

    编程技术 2025年3月8日
    200
  • js中delete元素和splice元素的区别详解

    本文主要和大家分享js删除数组中的元素delete和splice的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 例如有一个数组是 :var textArr = [‘a’…

    编程技术 2025年3月8日
    200
  • JS删除数组里的某个元素实例代码

    本文主要为大家分享一篇js删除数组里的某个元素方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 删除数组指定的某个元素 首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,…

    编程技术 2025年3月8日
    200
  • js中promise实例解析

    大家都知道nodejs很快,为什么会这么快呢,原因就是node采用异步回调的方式来处理需要等待的事件,使得代码会继续往下执行不用在某个地方等待着。但是也有一个不好的地方,当我们有很多回调的时候,比如这个回调执行完需要去执行下个回调,然后接着…

    2025年3月8日
    200

发表回复

登录后才能评论