掌握 ES6 中 class 语法的基本结构与使用方法
理解构造函数(constructor)在类中的作用
学会通过类创建多个具有相同结构的对象实例
掌握类的继承机制,能够使用 extends 和 super 实现代码复用
理解 JavaScript 类如何支持封装、复用与模块化开发
ES6(ECMAScript 2015)引入了 class 语法,为 JavaScript 提供了一种更清晰、更结构化的方式来实现面向对象编程。虽然底层仍基于原型(prototype),但 class 语法让代码更接近传统 OOP 语言(如 Java、C#)的风格。
基本语法
class ClassName {
constructor(/* 参数 */) {
// 初始化实例属性
}
// 定义方法
methodName() {
// 方法逻辑
}
}class 关键字用于声明一个类
constructor() 是特殊方法,在使用 new 创建实例时自动调用
类中可定义多个方法,这些方法会被所有实例共享
下面是一个定义“人”类的示例:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`你好,我的名字是 ${this.name},今年 ${this.age} 岁。`);
}
}
const person1 = new Person("张伟", 28);
person1.greet(); // 输出:你好,我的名字是 张伟,今年 28 岁。说明:
constructor接收参数并初始化this.name和this.age
greet是一个普通方法,可通过实例调用使用
new Person(...)创建新对象实例
构造函数是类的核心部分,用于在对象创建时初始化其属性。
class Car {
constructor(brand, model, year) {
this.brand = brand;
this.model = model;
this.year = year;
}
displayInfo() {
console.log(`${this.year} 年款 ${this.brand} ${this.model}`);
}
}
const myCar = new Car("丰田", "卡罗拉", 2021);
myCar.displayInfo(); // 输出:2021 年款 丰田 卡罗拉
每个实例都拥有自己独立的属性值,但共享相同的方法定义。
JavaScript 类支持单继承,即一个子类可以继承一个父类的所有属性和方法,并可扩展或重写功能。
extends 和 super// 父类
class Car {
constructor(brand, model, year) {
this.brand = brand;
this.model = model;
this.year = year;
}
displayBasicInfo() {
console.log(`${this.year} ${this.brand} ${this.model}`);
}
}
// 子类
class ElectricCar extends Car {
constructor(brand, model, year, batteryLife) {
super(brand, model, year); // 调用父类构造函数
this.batteryLife = batteryLife; // 新增属性
}
displayBatteryInfo() {
console.log(`电池续航时间:${this.batteryLife} 小时`);
}
}
const tesla = new ElectricCar("特斯拉", "Model S", 2022, 24);
tesla.displayBasicInfo(); // 输出:2022 特斯拉 Model S
tesla.displayBatteryInfo(); // 输出:电池续航时间:24 小时
关键点:
extends表示继承关系
super(...)必须在子类构造函数中调用,用于初始化父类属性子类可新增属性(如
batteryLife)和方法(如displayBatteryInfo)
类的最大优势之一是能够高效创建多个结构一致但数据不同的对象。
class Book {
constructor(title, author, isbn) {
this.title = title;
this.author = author;
this.isbn = isbn;
}
getInfo() {
return `${this.title} —— 作者:${this.author}`;
}
}
const book1 = new Book("JavaScript 高级程序设计", "马特·弗里斯比", "978-7-115-12345-6");
const book2 = new Book("你不知道的 JavaScript", "凯尔·辛普森", "978-7-115-67890-1");
console.log(book1.getInfo()); // 输出:JavaScript 高级程序设计 —— 作者:马特·弗里斯比
console.log(book2.getInfo()); // 输出:你不知道的 JavaScript —— 作者:凯尔·辛普森这种方式避免了重复代码,提升了可维护性。
注意:JavaScript 的类本质上仍是基于原型的语法糖,理解原型链有助于深入掌握其运行机制。
使用 class 声明类,constructor 初始化属性
通过 new 创建类的实例
方法直接定义在类体内,无需加 function 关键字
子类使用 extends 继承父类,用 super() 调用父类构造函数
类支持创建多个独立实例,适用于建模现实世界实体
如果在类中没有显式定义 constructor,JavaScript 会如何处理?尝试写一个无构造函数的类并创建实例。
在继承中,如果子类重写了父类的某个方法,如何在子类方法中调用父类的原始实现?
设计一个 Animal 类作为基类,再派生出 Dog 和 Cat 两个子类,分别重写 speak() 方法使其输出不同叫声,并通过实例验证多态行为。