Middle+
18
Предложите несколько вариантов исправления метода getMultiSum, чтобы он правильно вычислял результат (потеря контекста this).
Companies where asked
Answer from AI
sobes.tech AI
Потеря контекста this в методе getMultiSum обычно происходит, когда метод передается как callback или вызывается вне объекта. Чтобы исправить это, можно использовать несколько подходов:
- Привязать контекст явно через
bind:
const boundGetMultiSum = obj.getMultiSum.bind(obj);
boundGetMultiSum();
- Использовать стрелочную функцию при определении метода (если метод внутри класса или объекта):
const obj = {
numbers: [1, 2, 3],
getMultiSum: () => obj.numbers.reduce((acc, val) => acc + val, 0)
};
Однако стрелочные функции не имеют собственного this, поэтому нужно быть осторожным.
- Сохранять контекст в переменную:
const obj = {
numbers: [1, 2, 3],
getMultiSum() {
const self = this;
return this.numbers.reduce(function(acc, val) {
return acc + val;
}, 0);
}
};
- Использовать стрелочные функции внутри метода для сохранения
this:
const obj = {
numbers: [1, 2, 3],
getMultiSum() {
return this.numbers.reduce((acc, val) => acc + val, 0);
}
};
- Вызывать метод через объект, чтобы
thisбыл корректным:
obj.getMultiSum();
Если метод передается как callback, можно обернуть вызов:
someFunc(() => obj.getMultiSum());
Таким образом, ключ — обеспечить, чтобы при вызове метода this указывал на нужный объект, используя bind, стрелочные функции или правильный вызов.