let obj = {
fac: function(x) {
return (x == 1) ? x : x * obj.fac(x - 1);
}
};
function decorator(func) {
let cache = new Map();
return function(x) {
if (cache.has(x)) {
return cache.get(x);
};
let result = func(x);
cache.set(x, result);
return result
}
}
obj.fac = decorator(obj.fac);
obj.fac(5)
Вот так работает