Почему в новом объекте появляется свойство не из конструктора js

97
02 июня 2021, 12:20

    class Hamburger{
      meat = 0;
      constructor(type) {
        this.type = type;
      }
    }
    let myHmburger = new Hamburger('classic')
    myHmburger.meat // 0

Почему в новом объекте вдруг появилось свойство meat, я ведь не в конструкторе его писал. Как тогда этот код выглядел бы не в es6?

Answer 1

Хотя формально, также как и раньше, в спецификации нет описания полей класса, только методов (подробнее в ответе на вопрос: Описание полей класса ES6), браузеры могут реализовывать описание полей на свое усмотрение.

Например Chrome, помещает описанное поле непосредственно в объект, как будто его объявили в конструкторе через this

class Hamburger{
  meat = 0;
  constructor(type) {
    this.type = type;
  }
}

то же, что и

class Hamburger{
  constructor(type) {
    this.meat = 0;
    this.type = type;
  }
}

однако другие браузеры могут либо упасть с ошибкой синтаксиса, либо поместить указанное поле в прототип.

READ ALSO
Почему этот короткий код JavsScript работает

Почему этот короткий код JavsScript работает

Учу JS, наткнулся на такой пример и завис(((

88
Добавление блока индексируемного Vue js

Добавление блока индексируемного Vue js

Как сделать такое добавление блока при нажатии на кнопку добавить блок как здесь, чтобы присваивался id и можно было перемещать блоки

95
Медиа запросы меньше 1024рх

Медиа запросы меньше 1024рх

вопрос такойЕсть класс

97
ssh через QProcess

ssh через QProcess

Есть вот такой код :

102