Front-end-Job-Interview-Questions

Ответы на вопросы на должность Frontend разработчика.


Project maintained by FedorovAlexander Hosted on GitHub Pages — Theme by mattgraham

В чём разница между классом в ES6 и функцией-конструктором в ES5?

// 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 более понятное и усваиваемое.


Предыдущий вопрос | Следующий вопрос