初识ES6:简明扼要的Class语法探索之旅
2024-02-06 20:55:10
ES6 中的 class 是一个语法糖结构,底层依然是基于原型和构造函数。何以见得呢?让我们通过几个简单的例子来探索 class 的本质和使用方式。
首先,我们来看一个简单的 ES6 class 定义:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
这个 class 定义了一个名为 Person 的类,它有两个属性:name 和 age。同时,它还定义了一个名为 greet 的方法,用于向控制台输出一个问候语。
要使用这个类,我们可以通过 new 来创建一个实例:
const person = new Person('John', 30);
person.greet(); // Hello, my name is John and I am 30 years old.
这个代码创建了一个名为 person 的 Person 实例,并调用了它的 greet 方法。
class 语法糖的底层实现是使用原型和构造函数。每个 class 都有一个 prototype 属性,它是一个对象,包含了类的所有方法。当我们创建一个 class 的实例时,JavaScript 会在内存中创建一个新的对象,并将其 prototype 属性设置为类的 prototype 属性。这意味着实例可以访问类中的所有方法。
我们可以通过 Object.getPrototypeOf() 方法来查看实例的 prototype 属性:
console.log(Object.getPrototypeOf(person)); // Person {}
输出结果表明,person 实例的 prototype 属性是 Person 类。
同样,每个 class 都有一个 constructor 方法,它是一个特殊的函数,用于初始化类的实例。当我们创建一个 class 的实例时,JavaScript 会自动调用 constructor 方法。
我们可以通过以下代码来查看 Person 类的 constructor 方法:
console.log(Person.constructor); // function Person(name, age) { ... }
输出结果表明,Person 类的 constructor 方法是一个名为 Person 的函数,它接收两个参数:name 和 age。
通过这两个例子,我们可以看到 ES6 class 的底层实现是使用原型和构造函数。class 语法糖只是让 JavaScript 的面向对象编程变得更加简洁和易读。
ES6 Class 的继承与方法覆盖
ES6 class 支持继承,我们可以通过 extends 关键字来实现继承。例如,我们可以创建一个名为 Student 的类,它继承自 Person 类:
class Student extends Person {
constructor(name, age, major) {
super(name, age);
this.major = major;
}
study() {
console.log(`I am ${this.name} and I am studying ${this.major}.`);
}
}
这个代码定义了一个名为 Student 的类,它继承自 Person 类。Student 类有两个属性:name 和 age,它们来自 Person 类。此外,Student 类还定义了一个名为 major 的属性,用于存储学生的主修专业。Student 类还定义了一个名为 study 的方法,用于向控制台输出一个学习信息。
我们可以通过以下代码来创建 Student 类