Задача по введению в ООП: Контекст(this)

Вот это не идиоматически. new нужно использовать с конструкторами. make по своей сути - фабрика объектов. Корректнее было бы

return make( ....

Начал смотреть решения учителя:

const make = (numer, denom) => ({
  numer,
  denom,
  getNumer() {
    return this.numer;
  },
  getDenom() {
    return this.denom;
  },
  toString() {
    return `${this.getNumer()}/${this.getDenom()}`;
  },
  add(rational) {
    const newNumer = this.getNumer() * rational.getDenom() + rational.getNumer() * this.getDenom();
    const newDenom = this.getDenom() * rational.getDenom();
    return make(newNumer, newDenom);
  },
});

Объясни только пожалуйста, что это за синтаксис:

const make = (numer, denom) => ({

}); 

Что обозначают скобки после “=>” ?

 ({  });

Это функция которая возвращает объект.

Анонимная функция

() => { ... }

Еще валидный синтаксис с () => 10 без скобок. Это функция которая возвращает 10.
Еще валидный синтаксис () => return 10 - с явным return.
Синтаксис () => (10) - тоже валидный. Просто выражение 10 взято в скобки.
Синтаксис () => ({}) - это анонимная функция которая возвращает объект. А скобки нужны чтобы парсер js отличил {} функции от {} объекта.

С этими стрелочными функциями и их сокращенными вариантами написания мозг немного съезжает набекрень. Ибо много комбинаций и их интерпретаций.

Рахим с хекслета адекватный парень, но тот кто писал этот пример не сделал его проще для начинающих.

Я бы писал так:

function make(number, denom) {
  return {
    numer: numer,
    denom: denom,
    getNumer() {
      return this.numer;
    },
    getDenom() {
      return this.denom;
    },
    toString() {
      return `${this.getNumer()}/${this.getDenom()}`;
    },
    add(rational) {
      const newNumer = this.getNumer() * rational.getDenom() + rational.getNumer() * this.getDenom();
      const newDenom = this.getDenom() * rational.getDenom();
      return make(newNumer, newDenom);
    }
  }
}
2 лайка