-
Notifications
You must be signed in to change notification settings - Fork 183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
深入继承:一步步捋清五种继承方式 #3
Labels
Comments
@yanguoyu 第四种方法本来就有这个问题,所以才会出现方法五,我上面解释了,你再认真看一下 |
哦,了解。 |
我觉得最后一个图有误,组合继承调用两次,第一次是继承原型,第二次继承实例,Object.create(父原型)不就是建立一个父原型的一个副本么?子的原型为什么指向父的构造函数呢? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
总览
一、借助构造函数
缺点
子类没有继承父类的原型方法
只继承了父类构造函数中的属性和方法
二、借助原型链
原型图如下
缺点
引用类型的属性被所有实例共享,实例之间会互相影响
三、组合(构造+原型链)
优点
每个实例不会再互相影响
缺点
实例化时,父类被构造了两次,这没有必要
call一次,new一次
四、组合优化一
缺点
无法判断实例的构造函数是父类还是子类
但其实,构造函数就是父类本身
很难得才通过
Parent4.call(this)
改变了构造函数的指向,现在又改回去了?天……不想看下去了行不行,兄dei,坚持一会就是胜利,别打瞌睡Child4.prototype = Parent4.prototype
只是把Child4
的prototype
属性指针指向了Parent4.prototype
这个引用对象而已,实际上Parent4.prototype.constructor = Parent4
,这里说的有点绕,可以结合图好好理解一下五、组合优化二
Object.create
请先移步Object.create() - JavaScript | MDN
但是,这时候,实例对象的
constructor
依然是Parent5
所以需要重新指定实例对象的构造器
Good !
等下,还是验证一下吧
So perfect !
后记
感谢您耐心看到这里,希望有所收获!
如果不是很忙的话,麻烦点个star⭐【Github博客传送门】,举手之劳,却是对作者莫大的鼓励。
我在学习过程中喜欢做记录,分享的是自己在前端之路上的一些积累和思考,希望能跟大家一起交流与进步,更多文章请看【amandakelake的Github博客】
参考
继承与原型链 - JavaScript | MDN
JavaScript inheritance by example by Dr.Axel
Vjeux » Javascript – How Prototypal Inheritance really works
How To Work with Prototypes and Inheritance in JavaScript | DigitalOcean
The text was updated successfully, but these errors were encountered: