ES6类和继承

在ES6之前,JavaScript中没有类(class)的概念,而是通过原型继承(prototype inheritance)来实现面向对象编程。ES6引入了类的概念,使得JavaScript更加符合传统面向对象编程语言的习惯。类的定义可以用class关键字实现。

类的基本语法如下:

class MyClass {
  constructor(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
  }

  method1() {
    // 方法1
    return 'a';
  }

  method2() {
    // 方法2
    return 'b';
  }
}

在这个例子中,我们定义了一个名为MyClass的类,它包含了一个构造函数和两个方法method1和method2。构造函数是类的默认方法,当使用new关键字创建类的实例时,会自动调用构造函数。

类的实例可以通过new关键字创建,例如:

const obj = new MyClass('value1', 'value2');

在这个例子中,我们创建了一个名为obj的MyClass类的实例,并传递了两个参数给构造函数。实例的属性prop1和prop2将根据构造函数的参数进行初始化。

继承是面向对象编程的重要特性,它允许创建一个新的类,并从现有的类派生出来。ES6中通过extends关键字实现类的继承。例如:

class MySubClass extends MyClass {
  constructor(prop1, prop2, prop3) {
    super(prop1, prop2);
    this.prop3 = prop3;
  }

  method3() {
    // 方法3
    return 'c';
  }
}

在这个例子中,我们定义了一个名为MySubClass的类,它继承了MyClass,并添加了一个新的属性prop3和一个新的方法method3。使用super关键字调用父类的构造函数,以便初始化继承自父类的属性。

继承后,子类可以访问父类的属性和方法,也可以添加新的属性和方法。例如:

const obj2 = new MySubClass('value1', 'value2', 'value3');
console.log(obj2.prop1); // 输出'value1'
console.log(obj2.method1()); // 输出'a'
console.log(obj2.prop3); // 输出'value3'
console.log(obj2.method3()); // 输出'c'

在这个例子中,我们创建了一个名为obj2的MySubClass类的实例,并访问了其继承自父类的属性和方法,以及其新增的属性和方法。

总之,类和继承是ES6引入的重要特性,使得JavaScript更加符合传统面向对象编程语言的习惯。通过使用类和继承,我们可以更方便地组织和管理代码,以及实现复杂的面向对象编程逻辑。