我
ES6 的类和 ES5 的构造函数有什么区别?
难度:
让我们来看一个例子:
js
// ES5 构造函数
function Person(name) {
this.name = name;
}
// ES6 类
class Person {
constructor(name) {
this.name = name;
}
}
对于简单的构造函数而言,他们看起来很相似。
他们的主要区别体现在类继承上。如果我们想要创建一个继承于 Person
父类的 Student
子类,并且添加一个 studentId
字段,我们需要做的修改如下:
js
// ES5 构造函数
function Student(name, studentId) {
// 调用父类的构造函数来初始化父类的成员变量
Person.call(this, name);
// 初始化子类自己的成员变量
this.studentId = studentId;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
// ES6 类
class Student extends Person {
constructor(name, studentId) {
super(name);
this.studentId = studentId;
}
}
从上面的例子我们可以看出来,使用 ES5 构造函数来实现继承特别麻烦,而使用 ES6 类的方式来实现就特别容易理解和记忆。