js用高階函式動態建立代理(代理模式之快取代理)
阿新 • • 發佈:2021-02-04
技術標籤:javascriptweb前端javascript前端
運用高階元件結合代理模式中的快取代理可以減少不必要的計算,舉例我們經常使用到的加減乘除法。
// 加法運算
var plus = function(){
console.log('加法'); // TODO: 用於驗證,記得刪除
var a = 0;
for(var i = 0, l = arguments.length; i < l; i++){
a = a + arguments[i];
};
return a;
}
// 乘法運算
var mult = function(){
console.log('乘法' ); // TODO: 用於驗證,記得刪除
var a = 1;
for(var i = 0, l = arguments.length; i < l; i++){
a = a * arguments[i];
};
return a;
}
// 快取代理
var proxyFunc = function(fn){
var cache = {};
return function(){
var args = Array.prototype.join.call(arguments, ',');
if (args in cache){
return cache[args];
} ;
return cache[args] = fn.apply(this, arguments)
}
}
// 程式碼呼叫與驗證
var proxyPlus = proxyFunc(plus), proxyMult = proxyFunc(mult);
console.log(proxyPlus(1, 2, 3, 4));
console.log(proxyPlus(1, 2, 3, 4));
console.log(proxyMult(1, 2, 3, 4));
console.log(proxyMult(1, 2, 3, 4));
執行以上程式碼,從控制檯可以看到下圖所示結果,其中‘加法’、‘乘法’只輸出了一次,也就是隻進行了一次計算,另一次則是從快取代理直接返回結果,節省了沒必要的計算。