Я хочу реализовать кеш-подобное закрытие, которое кеширует результаты для более быстрой работы. Например, представьте, что даны два числа, и цель состоит в том, чтобы возвратить их кратное число. Сначала мы смотрим на кэш, рассчитывается ли оно раньше или нет, если да, то оно возвращает значение быстро, в противном случае его следует вычислить и сохранить в кеше.
Вот что я реализовал:
var Obj = {
h(x, y) {
return x + y;
},
slow(x, y) {
alert('called slow function with ' + x + ', ' + y);
return x * y * this.h(x, y)
}
}
function c (func){
var cache = {};
return function(x, y){
if (!cache[[x, y]]){
cache[[x, y]] = func(x, y);
}
return cache[[x, y]];
}
}
Obj.slow = c(Obj.slow);
alert(Obj.slow(1, 4));
alert(Obj.slow(1, 2));
alert(Obj.slow(1, 4));
alert(Obj.slow(1, 3));
alert(Obj.slow(1, 2));
alert(Obj.slow(1, 3));
Я не знаю, почему это не работает. Буду благодарен, если кто-нибудь сможет мне помочь.
Ошибка в строке 7 с ключевым словом this
.
TypeError: this.h не является функцией