2013-07-29 25 views
3

我正在閱讀John Resig關於Javascript的書的memoization一章,我有以下問題: 是否更好的方法開發memoization或創建緩存作爲對象的屬性假設我可以修改對象的設計?
此示例實現高速緩存作爲對象的功能的一部分:我應該使用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

嗯,這是事情:如果你有一個「isOdd」函數呢?你會希望它有自己的緩存,所以第二個選項更容易。

這就是說,這不是一個很好的例子,因爲x%2==0是一個非常便宜的操作,所以它不應該成爲一個函數。

+1

>>'如果你有一個「isOdd」函數呢?你會希望它有自己的緩存嗎?是的,但我也可以在對象中創建第二個緩存? >>'這不是一個很好的例子,因爲x%2 == 0是一個非常便宜的操作,你說得對,但我試圖讓我的示例儘可能簡單以便於說明 –

相關問題