Какую операцию выполняет 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 шт):

Автор решения: Max

Это геттер класса в JavaScript. Посредством такого синтаксиса не нужно вызывать функцию для получения значения, а можно обратиться к ней как к свойству объекта, через точку и без скобок. Тут он применен в комбинации с декоратором @HostBinding('class.valid'), что вызвало непонимание такого синтаксиса.

→ Ссылка
Автор решения: Denis Bubnov

В стандарте JavaScript ECMAScript 5 была предложена концепция методов доступа: для доступа к свойству определяется пара методов - get-метод для получения значения свойства и set-метод для установки значения.

Использование аксессоров или методов доступа позволяет управлять тем, как значение устанавливается и как оно возвращается.

Методы доступа определяются как обычные методы, только перед ними ставятся ключевые слова get/set. Set-метод контроллирует установку значения, а get-метод возвращает значение.

Ссылки на источники:

→ Ссылка
Автор решения: Grundy

В данном случае 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"

→ Ссылка