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更加符合传统面向对象编程语言的习惯。通过使用类和继承,我们可以更方便地组织和管理代码,以及实现复杂的面向对象编程逻辑。