Как правильно написать сеттеры и геттеры

Код выдает синтаксическую ошибку в vscode и playcode. В чем ошибка понять никак не могу.

function Counter() {

  this.number = 0

  get minus() {
    this.number = this.number - 1;
  }

  get plus() {
    this.number += 1;
  }

  set render(number) {
    h1.innerHTML = this.number;
  }
}

Ответы (2 шт):

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

Пример того как надо писать и использовать геттеры и сеттеры.

class Counter {

  constructor() {
    this._number = 0;
  }


  get number() {
    console.log('Было обращение к свойству number!');

    return this._number;
  }

  set number(value) {
    // Можно навесить дополнителную логику
    // Для примера выведим сообщение от том, что мы обновили свойство number

    console.log('Свойство number - обновлено!');
    this._number = value;
  }

  plus() {

    this.number++;

    return this;
  }

  minus() {

    this.number--;

    return this;
  }

  render() {
    document.querySelector('.result').innerHTML = this.number;
  }
}

const counter = new Counter();

counter
  .plus()
  .plus()
  .minus()
  .render();
<span class="result"></span>

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

Геттеры и сетторы можно объявлять только внутри определения класса и литерала объекта.

В примере в вопросе, идет попытка определить геттер внутри функции, что является синтаксической ошибкой.

Для решения нужно либо переписать с использованием классов, либо использовать литерал объекта, например:

var Counter = {

  number: 0,

  get minus() {
    return this.number - 1;
  },

  get plus() {
    return this.number + 1;
  },

  set render(number) {
    this.number = number;
  }
}

Counter.render = 10;

console.log(Counter.number)
console.log(Counter.minus)
console.log(Counter.plus)

→ Ссылка