eg: class person { getName(){} }
1. es6的class相当于es5的构造函数。也就是 person.proptotype.constructor === person为true。
2. 类必须用new关键字来调用,否则会报错。
3. class不存在变量声明提升,使用之前必须先定义。
4. es5中的prototype继续在es6的class中存在,在类中定义的方法,都存在与类的prototype对象上。比如上面的getName方法。在类中调用这些方法,就是调用的原型(prototype)上的方法。另外,类中定义的方法都是不可枚举的。
5. 类中的属性名可以使用表达式。eg: var name = 'tom'; class person{ [name]() { } };
6. constructor方法是类的默认属性,默认返回实例对象。
7. 实例的属性除非显式定义在其本身(即定义在this
对象上),否则都是定义在原型上(即定 义在class
上)。
8. 类可以像函数一样使用表达式来定义。eg: const myClass = class {};
9. 私有属性和私有方法,也就是只能在类内部访问的属性和方法;定义之前加‘#’号。
eg: class person { #x = 1; #getX(){ return #x } }
10. 静态属性和静态方法,也就是只能被类自己访问,不被实例继承。定义之前加static关键字。
eg: class person { static state = {} } 或者 class person { } person.state = {};
11. 实例属性和实例方法,也就是可以被实例继承的方法和属性。直接用等号定义。
eg: class person { state = {} };
12. 在react中,组件中使用getName(){}这种写法表示该属性存在于实例的原型上,而使用getName = () => {} 箭头函数,表示该属性存在于实例本身(this)上.。
13. class内部调用new.target放回当前类。