Какую операцию выполняет get без скобок () в выражении. Angular @Directive
Есть следующий пример в документации Angular : API > @angular/core Какую операцию выполняет get в этом выражении и где в документациях можно с ним ознакомиться?
@HostBinding('class.valid') get valid() { return this.control.valid; }
Полностью:
@Directive({selector: '[ngModel]'})
class NgModelStatus {
constructor(public control: NgModel) {}
@HostBinding('class.valid') get valid() { return this.control.valid; }
@HostBinding('class.invalid') get invalid() { return this.control.invalid; }
}
@Component({
selector: 'app',
template: `<input [(ngModel)]="prop">`,
})
class App {
prop;
}
Ответы (3 шт):
Это геттер класса в JavaScript. Посредством такого синтаксиса не нужно вызывать функцию для получения значения, а можно обратиться к ней как к свойству объекта, через точку и без скобок. Тут он применен в комбинации с декоратором @HostBinding('class.valid'), что вызвало непонимание такого синтаксиса.
В стандарте JavaScript ECMAScript 5 была предложена концепция методов доступа: для доступа к свойству определяется пара методов - get-метод для получения значения свойства и set-метод для установки значения.
Использование аксессоров или методов доступа позволяет управлять тем, как значение устанавливается и как оно возвращается.
Методы доступа определяются как обычные методы, только перед ними ставятся ключевые слова get/set. Set-метод контроллирует установку значения, а get-метод возвращает значение.
Ссылки на источники:
В данном случае get - это синтаксическая конструкция языка, позволяющая определить в классе либо объекте свойство-геттер.
Обращение к такому свойству выглядит как обращение к полю, а не к методу.
const obj = {
log: ['a', 'b', 'c'],
get latest() {
if (this.log.length == 0) {
return undefined;
}
return this.log[this.log.length - 1];
}
}
console.log(obj.latest);
// expected output: "c"