在ES6之前,JavaScript使用原型继承创建对象和构造函数,但是这种方式不够直观和易于理解。ES6引入了一种更面向对象的方式,即类和继承。
类是一种创建对象的模板,它包含属性和方法的定义,可以实例化为一个具体的对象。继承则是从一个已有的类派生出一个新的类,新的类继承了父类的所有属性和方法。
下面是一个简单的类的示例:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
let person1 = new Person('John', 25);
person1.sayHello(); // Output: Hello, my name is John and I am 25 years old.
在这个例子中,我们定义了一个Person类,并使用constructor方法来初始化属性name和age。我们还定义了一个sayHello方法,该方法将打印出一个包含对象属性的字符串。最后,我们使用new关键字来创建一个Person对象,并调用sayHello方法。
接下来,我们将使用继承来创建一个Student类,它将继承Person类的属性和方法:
class Student extends Person {
constructor(name, age, grade) {
super(name, age);
this.grade = grade;
}
study() {
console.log(`${this.name} is studying in grade ${this.grade}.`);
}
}
let student1 = new Student('Jane', 19, 'A');
student1.sayHello(); // Output: Hello, my name is Jane and I am 19 years old.
student1.study(); // Output: Jane is studying in grade A.
在这个例子中,我们使用extends关键字创建了一个Student类,并在其构造函数中使用super方法来调用其父类构造函数。我们还定义了一个新方法study,该方法打印出一个学生的学年级别。最后,我们创建了一个Student对象,并调用其父类的sayHello方法和自己的study方法。
在这个例子中,我们可以看到继承的好处,我们可以轻松地扩展已有类的功能,而不必重新定义相同的属性和方法。