JS и _ в префиксе

158
22 сентября 2018, 10:00

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

class Ab{
  constructor(n){
    this.name = n;
  }
  get name(){return this._name }
  set name(value){ this._name = value }
}
console.log(new Ab(1).name);

Все работает. Вопрос такой. Если в сеттере или геттере перед названием метода/свойства поставить _ , то интерпритатор что сделает? То есть по факту такого свойства нету, но оно берет это свойство, но без _

Answer 1

Если в сеттере или геттере перед названием метода/свойства поставить _ , то интерпритатор что сделает?

Ничего не сделает.

В данном случае используется следующая особенность яваскрипта: создание поля при его отсутствии в момент присваивания.

Первый раз когда присваивается this._name в объекте создается соответствующее поле.

В итоге запись данного класса эквивалентна следующей:

class Ab{
  constructor(n){
    this._name = n;
  }
  get name(){return this._name }
  set name(value){ this._name = value }
}

Поведение никак не поменялось, однако теперь видно, что методы get и set просто используют существующее поле, которое инициализируется в конструкторе.

class Ab { 
  constructor(n) { 
    this.name = n; 
  } 
 
  get name() { 
    return this.$name 
  } 
  set name(value) { 
    this.$name = value 
  } 
} 
 
console.log(new Ab(1).name); 
 
class Ab1 { 
  constructor(n) { 
    this.name = n; 
  } 
 
  get name() { 
    return this.custom 
  } 
  set name(value) { 
    this.custom = value 
  } 
} 
 
console.log(new Ab1(2).name);

READ ALSO
js Диалог SaveAs

js Диалог SaveAs

Направьте что почитать1) Нужно по нажатию на кнопочку открыть диалог для выбора места сохранения файла

168
Как убрать курсор выделения текста? Jquery

Как убрать курсор выделения текста? Jquery

Как убрать курсор выделения текста? Проблема: при наведении на текст, который имеет свойство disableSelection курсор изменяется на вот такой (2 по счету)...

273
Как обновить запись с полем типа set?

Как обновить запись с полем типа set?

Есть код: UPDATE mytable SET myset = myset|2 WHERE key=3

196
mysql не использует индексы

mysql не использует индексы

есть такой запрос:

243