@MaksZhukov
programer

Почему метод класса не видит элемент через this?

Как сделать чтобы заработало sum([1,2,3],1,2)?
Ругается на то что cash не определена.
class Sum {
	constructor (){
		this.cash = {};
	}
    sum(arr, start, end) {
        var result = 0,
            key = arr.toString() + start + end;
        if (key in this.cash) {
            return this.cash[key];
        }
        for (let i = start - 1; i < end; i++) {
            result += arr[i];
        }
        this.cash[key] = result;
        return result;
    }
}
var sum = new Sum().sum;
  • Вопрос задан
  • 419 просмотров
Решения вопроса 1
@epifanB
инженер
Так как сохраняется ссылка на функцию sum в переменную sum и после идёт вызов через переменную, то this не указывает на Sum (https://developer.mozilla.org/ru/docs/Web/JavaScri... На мой взгляд проще всего, в данном случае, привязать метод sum к объекту Sum добавив в конструктор this.sum = this.sum.bind(this); Получится вот так
class Sum {
  constructor (){
    this.cash = {};
    this.sum = this.sum.bind(this);
  }
    sum(arr, start, end) {
        var result = 0,
            key = arr.toString() + start + end;
        if (key in this.cash) {
            return this.cash[key];
        }
        for (let i = start - 1; i < end; i++) {
            result += arr[i];
        }
        this.cash[key] = result;
        return result;
    }
}
var sum = new Sum().sum;
sum([1,2,3],1,2);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы