简述ES6 Class、extends是什么,有什么作用?
在ES6中,引入了class
和extends
关键字,标志着JavaScript正式支持基于类的面向对象编程。这两个特性提供了一种清晰、简洁的语法来创建对象和实现继承,与此前基于原型的继承相比,这种新语法使得对象模型的定义更加直观和易于理解。
Class(类)
class
关键字用于定义一个类。类是创建对象的蓝图,它可以包含构造函数、属性和方法。使用类,可以创建具有特定初始状态和行为的对象实例。
作用:
- 封装:类允许将数据(属性)和操作数据的方法封装在一起。
- 创建对象实例:通过
new
关键字,可以基于类创建新的对象实例。 - 代码组织:类提供了一种组织和封装代码的方式,有助于构建复杂的应用程序。
示例:
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.`);
}
}
const person1 = new Person('John', 30);
person1.greet(); // 输出: Hello, my name is John and I am 30 years old.
Extends(继承)
extends
关键字用于在类之间创建继承关系,允许子类继承父类的属性和方法。通过继承,可以创建一个共享父类属性和方法的新类,同时还可以添加或修改这些属性和方法。
作用:
- 代码复用:继承允许子类重用父类的代码,减少重复代码。
- 建立层次关系:通过继承,可以建立类之间的层次关系,有助于组织和管理代码。
- 多态:子类可以覆盖(override)父类的方法,提供特定于子类的实现,这是多态的一种表现。
示例:
class Student extends Person {
constructor(name, age, grade) {
super(name, age); // 调用父类的constructor
this.grade = grade;
}
study() {
console.log(`I am studying in grade ${this.grade}.`);
}
}
const student1 = new Student('Jane', 20, '12th');
student1.greet(); // 输出: Hello, my name is Jane and I am 20 years old.
student1.study(); // 输出: I am studying in grade 12th.
通过class
和extends
,ES6提供了一种更加简洁和直观的方式来实现基于类的继承,有助于构建和维护大型JavaScript应用程序。