3

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

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);
4

1 回答 1

1

好吧,事情是这样的:如果你有一个“isOdd”函数呢?你会希望它有自己的缓存,所以第二种选择更容易。

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

于 2013-07-29T06:35:12.840 回答