Skip to content

Latest commit

 

History

History
47 lines (33 loc) · 1.56 KB

File metadata and controls

47 lines (33 loc) · 1.56 KB

В чём разница между классом в 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.studenId = studentId;
  }
}

Наследование в синтаксисе ES5 является намного более многословным, а в ES6 более понятное и усваиваемое.