es6的class是构造函数的一个语法糖,但是必须使用new关键字调用,与构造函数不同的是,定义的方法不可枚举
class内部形如methodName() {...}不是函数的简写,而是class格式规范,方法之间不能加逗号,constructor省略时会被默认添加
class的方法都定义在prototype上面,可以通过this关键字将属性或变量写入实例,class关键字不存在声明提升
class存在存值函数(set)和取值函数(get),会拦截默认行为,定义的属性,setter/getter会存在属性的Descriptor对象上
class存在静态方法,通过static关键字定义,只存在于class构造函数上而不在实例上
class的静态属性,只能通过ClassName.propName设定,但是有提案实现直接在class内部实现实例属性直接propName = value,而静态属性在前面加上static关键字就行,通过babel转码,基本可以使用这种表现形式
new.target返回当前构造器
类的继承
class A {
}
class B extends A {
}
B.__proto__ === A // true
B.prototype.__proto__ === A.prototype // true