Есть такой код:
class Ab{
constructor(n){
this.name = n;
}
get name(){return this._name }
set name(value){ this._name = value }
}
console.log(new Ab(1).name);
Все работает. Вопрос такой. Если в сеттере или геттере перед названием метода/свойства поставить _ , то интерпритатор что сделает? То есть по факту такого свойства нету, но оно берет это свойство, но без _
Если в сеттере или геттере перед названием метода/свойства поставить _ , то интерпритатор что сделает?
Ничего не сделает.
В данном случае используется следующая особенность яваскрипта: создание поля при его отсутствии в момент присваивания.
Первый раз когда присваивается 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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Направьте что почитать1) Нужно по нажатию на кнопочку открыть диалог для выбора места сохранения файла
Как убрать курсор выделения текста? Проблема: при наведении на текст, который имеет свойство disableSelection курсор изменяется на вот такой (2 по счету)...