es6 中的继承
本文总结下 es6 中继承的相关知识(未完成)
参考es6-阮一峰
super#
子类中 super 关键字作为函数调用时表示父类的构造函数,用来新建父类的 this 对象。子类必须在 constructor 方法中调用 super 方法,否则新建实例会报错,子类自己的 this 对象必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后对其进行加工(加上子类自己的实例属性和方法),如果不调用 super 方法,子类就得不到 this 对象。如果子类没有定义 constructor 方法,则这个方法会被默认添加。子类构造函数中只有调用 super 之后才可以使用 this 关键字(否则会报错)。super 虽然代表父类的构造函数,但返回的是子类的实例(super 内部的 this 是子类的实例,相当于 Super.prototype.constructor.call(this)
)。
super 作为对象时:
- 在普通方法中指向父类的原型对象(定义在父类实例上的方法或属性无法通过 super 调用,通过 super 调用父类的方法时方法内部的 this 指向当前子类的实例),当通过 super 对某个属性赋值,相当于对当前子类相应的实例属性赋值;读取 super 的属性值时仍是从父类型原型对象上取值。
- 在静态方法中指向父类,在子类静态方法中通过 super 调用父类方法时,方法内部的this指向当前子类(而不是子类实例)
ES5 的继承,实质是先创造子类的实例对象this
,然后再将父类的方法添加到this
上面(Parent.apply(this)
)。ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this
上面(所以必须先调用super
方法),然后再用子类的构造函数修改this
。
作者:EGBDFACE
出处:https://www.cnblogs.com/EGBDFACE/p/16392310.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!