@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()


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

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

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

Похожие вопросы