13. 类

ES6 中有 class 语法。值得注意是,这里的 class 不是新的对象继承模型,它只是原型链的语法糖表现形式。

函数中使用 static 关键词定义构造函数的的方法和属性:

  1. class Task {
  2. constructor() {
  3. console.log("task instantiated!");
  4. }
  5. showId() {
  6. console.log(23);
  7. }
  8. static loadAll() {
  9. console.log("Loading all tasks..");
  10. }
  11. }
  12. console.log(typeof Task); // function
  13. let task = new Task(); // "task instantiated!"
  14. task.showId(); // 23
  15. Task.loadAll(); // "Loading all tasks.."

类中的继承和超集:

  1. class Car {
  2. constructor() {
  3. console.log("Creating a new car");
  4. }
  5. }
  6. class Porsche extends Car {
  7. constructor() {
  8. super();
  9. console.log("Creating Porsche");
  10. }
  11. }
  12. let c = new Porsche();
  13. // Creating a new car
  14. // Creating Porsche

extends 允许一个子类继承父类,需要注意的是,子类的 constructor 函数中需要执行 super() 函数。

当然,你也可以在子类方法中调用父类的方法,如 super.parentMethodName()

这里 阅读更多关于类的介绍。

有几点值得注意的是:

  • 类的声明不会提升(hoisting),如果你要使用某个 Class,那你必须在使用之前定义它,否则会抛出一个 ReferenceError 的错误
  • 在类中定义函数不需要使用 function 关键词