我正在阅读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);
答案 0 :(得分:1)
嗯,这就是问题:如果你有“isOdd”功能怎么办?您希望它拥有自己的缓存,因此第二个选项更容易。
话虽这么说,这不是一个很好的例子,因为x%2==0
是一个非常便宜的操作,所以不应该把它变成一个函数。