@aleks_web_dev

Создания метода объекта в ES5 И ES6 javascript?

Углубляюсь в ооп в js и назрел вопрос , а точнее правильно ли я понял одну вещь

// создаю метод sayHay как свойство экземпляра класса
function UserCreate(name, age, rol) {
    this.name = name;
    this.age = age;
    this.rol = rol;

    this.sayHay = function() {
        console.log(`Hello: ${this.name},${this.age},${this.rol}`)
    }
}

let userOne = new UserCreate('Jon', 33, 'developer')
userOne.sayHay()


// создаю метод в прототипе класса 
function UserCreate(name, age, rol) {
    this.name = name;
    this.age = age;
    this.rol = rol;
}
UserCreate.prototype.sayHay = function() {
    console.log(`Hello: ${this.name},${this.age},${this.rol}`)
}

let userOne = new UserCreate('Jon', 33, 'developer')
userOne.sayHay()

// эта запись аналогична той которая выше ?
class UserCreate {
    constructor(name, age, rol) {
        this.name = name;
        this.age = age;
        this.rol = rol;
    }
    sayHay() {
        console.log(`Hello: ${this.name},${this.age},${this.rol}`)
    }
}

let userOne = new UserCreate('Jon', 33, 'developer')
userOne.sayHay()


Вопрос почему мы не создаем метод как свойство ,как в первом примере а создаем в прототипе конструктора
Я так понял это для того чтобы каждый экземпляр класса не заполнял память , когда мы можем определить метод в прототипе и от будут доступен всем экземплярам Правильно ли я понял ?
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
@L1nks
Если скажем у нас будет 100 объектов User, то у каждого будет метод sayHello и это заполняет память.
Если мы записываем в прототип, то метод будет 1 и каждый из объектов User будет по цепочке прототипов ссылаться на него. То есть по сути да, вы правильно поняли.
А запись с классом это "синтаксический сахар" - то есть такой же функционал, просто записанный чуть проще.

Про классы хорошо написа на learn.javascript
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы