Есть такой код:
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);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости