Sobes.tech
Middle+
18

Предложите несколько вариантов исправления метода getMultiSum, чтобы он правильно вычислял результат (потеря контекста this).

Companies where asked
Т-БанкТ-Банк

Answer from AI

sobes.tech AI

Потеря контекста this в методе getMultiSum обычно происходит, когда метод передается как callback или вызывается вне объекта. Чтобы исправить это, можно использовать несколько подходов:

  1. Привязать контекст явно через bind:
const boundGetMultiSum = obj.getMultiSum.bind(obj);
boundGetMultiSum();
  1. Использовать стрелочную функцию при определении метода (если метод внутри класса или объекта):
const obj = {
  numbers: [1, 2, 3],
  getMultiSum: () => obj.numbers.reduce((acc, val) => acc + val, 0)
};

Однако стрелочные функции не имеют собственного this, поэтому нужно быть осторожным.

  1. Сохранять контекст в переменную:
const obj = {
  numbers: [1, 2, 3],
  getMultiSum() {
    const self = this;
    return this.numbers.reduce(function(acc, val) {
      return acc + val;
    }, 0);
  }
};
  1. Использовать стрелочные функции внутри метода для сохранения this:
const obj = {
  numbers: [1, 2, 3],
  getMultiSum() {
    return this.numbers.reduce((acc, val) => acc + val, 0);
  }
};
  1. Вызывать метод через объект, чтобы this был корректным:
obj.getMultiSum();

Если метод передается как callback, можно обернуть вызов:

someFunc(() => obj.getMultiSum());

Таким образом, ключ — обеспечить, чтобы при вызове метода this указывал на нужный объект, используя bind, стрелочные функции или правильный вызов.