es5 中类的本质
- 实际上是通过构造函数和原型链来模拟类的概念
- es5 没有 class 关键字
- 定义一个 function
- 再 function 的 prototype 上增加各种方法
- 使用 new 关键字创建实例,被 new 关键字调用的函数,就是构造函数
- 由时候被称为 伪类
- 这个函数也可以直接调用
es6 中的类
- 使用 class 关键字
- 由 constructor 构造函数,变量在构造函数中使用 this 指定变量
- 用 static 定义静态方法,静态方法的 this 指向类,而不是实例
- 使用 extends 进行集成
- 子类中使用 super 调用父类的构造函数或方法
- 必须使用 new 创建实例,不能直接调用 class
- 不支持私有属性/方法,没有 private/public 关键字【ts 中有】
- es6 为 new 命令引入了一个 new.target 属性
- 返回 new 命令作用于的那个构造函数,如果不是通过 new 调用,或 Reflect.construct() 调用的,new.target 会返回 undefined
- Reflect.construct(): 这是一个 ES6 引入的静态方法,用于创建一个由指定构造函数创建的实例。