es6 class

236 阅读2分钟

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放回当前类。