js继承的几种方式

1. 原型链式继承

即 子构造函数.prototype = ne

问题不能给父构造函数传递参数,改变子级构造函数里的对象时,父级也会跟着改变,父子构造函数的原型对象之间有共享问题

2. 借用构造函数继承

数()

注意:使用call和apply借用其他构造函数的成员, 可以解决给父构造函数传递参数的问题, 但是获取不到父构造函数原型上的成员。


3. 组合式继承

借用构造函数 + 原型式继承;

缺点调用了两次父类构造函数(耗内存)

4. 寄生式继承

优点:没有创建自定义类型,因为只是套了个壳子返回对象,这个函数顺理成章就成了创建的新对象。

缺点:就是给原型式继承外面套了个壳子没用到原型,无法复用。

5. 寄生组合式继承

这是继承的最完美方式

Object.create是一种创建对象的方式,它会创建一个中间对象把父级的原型上的方法都赋给子级

通过这种方式创建对象,新创建的对象obj的原型就是p,同时obj也拥有了属性name,这个新创建的中间对象的原型对象就是它的参数。

这种方式解决了上面的所有问题,是继承的最完美实现方式。

6. ES6中继承

Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。

输出

child  hello Jimmy 羊

super

子类必须在constructor方法里调用super方法,否则不能新建实例。这是因为子类没有属于自己的this对象,而是继承了父类的this对象而对其进行加工。显然,只有调用了super方法之后,才可以使用this

ES5继承和ES6继承的区别

在ES5中,继承实质上是子类先创建属于自己的this,然后再将父类的方法添加到this而在ES6中,则是先创建父类的实例对象this,然后再用子类的构造函数修改this。

本文内容部分来自原文:https://www.imooc.com/article/17389

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值