您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/3/18 23:18:31发布24次查看
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方法实现继承,这种继承最大的特点正好与原型链继承相反不能继承原型属性/方法--非共享(子类自有一份), 同样这是它的优点也是它的缺点, 另外它解决了原型链继承中无法向父类传参的缺点, 并且可以实现某种意义上的多继承--(注意这种多继承是打引号的)
组合继承
    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多种继承方式的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product