JavaScript中原型链是一个非常重要的内容,值得我们深入的去学习和探讨
回答标题,ES6时代需要学习原型链,因为ES6
中的class
只是一个语法糖,因此要深入理解ES6
的class
,就需要具备原型链的知识。
基于原型
1 | class Point { |
既然class
只是一个语法糖,那么就有:
1 | typeof Point // "function" |
Point
中定义的方法就是定义在类的原型prototype
中的,它属于类方法 。在构造函数中通过this.XXX
定义的才属于实例变量。当要扩展一个类的时候我们变可以使用Object.assign
向类的原型prototype
中添加方法:
1 | class Point { |
受对象属性描述符控制
和ES5一样,我们可以通过对象属性描述符来精细的控制对象的属性。
1 | class Point{ |
使用Object.getOwnPropertyDescriptor
来查看sayName
当前的特性:
1 | Object.getOwnPropertyDescriptor(Point.prototype, "sayName") |
当对对象的某个属性的访问或者写入有所限制的时候,还可以使用访问器属性,这样就可以将原属性设置为私有属性,对外只暴露访问器属性即可。
1 | class Person{ |
由此可见,ES6的class
也是基于原型的,但是ES6及更高的版本也为class
添加很多的特性,详见阮老师的书。既然ES6的class
是基于原型的,那它的继承又是怎么做的呢?