ES6 中Class(类)的概念

87 阅读1分钟

类的数据类型为==函数==,类指向构造函数,类的所有方法都在类的prototype属性上面。

在类的实例上调用方法,就是在调用原型上的方法。

class B {}
let b = new B();

b.constructor === B.prototype.constructor; //true

类的内部定义的方法都是不可枚举的,与ES5不同。

constructor方法

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。没有显式定义时,会默认添加一个空的constructor方法。

类必须用new调用,否则会报错,普通构造函数不用new 也可以执行。

类的实例

与 ES5 一样,类的所有实例共享一个原型对象。

注意

  • 类和模块内部,默认就是==严格模式==
  • 类==不存在==变量提升
  • 类内部含有的this默认指向实例,如果单独使用类当中的方法会报错
    • 方案一:在constructor中绑定this
    • 方案二:使用箭头函数
    • 方案三:使用Rroxy(具体待追加)

静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。

如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用。

注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。

父类的静态方法,可以被子类继承。

静态方法也是可以从super对象上调用的。

class Foo {
  static classMethod() {
    return 'hello';
  }
}

class Bar extends Foo {
  static classMethod() {
    return super.classMethod() + ', too';
  }
}

Bar.classMethod() // "hello, too"

实例属性的新写法

class A {
  constructor() {
    this._count = 1;
  } 
}
				 ||
         ||
class A {
  _count = 1;
}