Ответы на вопросы на должность Frontend разработчика.
// ES5 функция-конструктор
function Person(name) {
this.name = name;
}
// ES6 класс
class Person {
constructor(name) {
this.name = name;
}
}
Основное отличие в конструкторе возникает при использовании наследования. Если мы хотим создать класс Student
(который будет являться подклассом класса Person
) и добавить поле studentId
, то в дополнение к вышеописанному мы должны сделать следующее:
// 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 более понятное и усваиваемое.