我应该使用memoization还是对象的缓存

时间:2013-07-29 06:30:51

标签: javascript

我正在阅读John Resig关于Javascript的书的记忆章节,我有以下问题: 假设我可以修改对象的设计,为方法开发memoization或创建缓存作为对象的属性是否更好? 此示例将缓存作为对象功能的一部分实现:

function Calc() {
    this._cache = {};
    this.isEven = function(arg) {
        return this._cache[arg] !== undefined ?
               this._cache[arg] :
               this._cache[arg] = (arg%2===0);
        }
}

此示例将缓存作为函数功能的一部分实现:

function Calc() {
    this.isEven = function(arg) {
        this.isEven.cache = this.isEven.cache || {};
        return this.isEven.cache[arg] !== undefined ?
               this.isEven.cache[arg] :
               this.isEven.cache[arg] = (arg%2===0);
        }
}

这是他们应该使用的方式:

var obj = new Calc();
obj.isEven(3);

1 个答案:

答案 0 :(得分:1)

嗯,这就是问题:如果你有“isOdd”功能怎么办?您希望它拥有自己的缓存,因此第二个选项更容易。

话虽这么说,这不是一个很好的例子,因为x%2==0是一个非常便宜的操作,所以不应该把它变成一个函数。