使用备忘模式,利用了函数的自定义属性,先看一个例子
var test = function (){} test.myAttr = "attr";
这样,就给test加上了一个自定义的属性,myAttr。
备忘模式,正式利用了这个方法,将已经运行过的结果存储起来,将函数接受到的参数作为key,将函数运行的结果作为value返回即可。代码如下
var myFunc = function (param) { if(!myFunc.cache[param]){ var result = {};
//...各种操作 myFunc.cache[param] = result; } return myFunc.cache[param]; } myFunc.cache = {};
上面的写法,只适用于参数只有一个的情况,但实际情况中不会都是这样,因此可以考虑将参数转化为字符串,作为缓存对象里的key值,以哈希对象的形式保存
var myFunc = function () { //arguments 是myFunc的参数列表,格式给{"1":arg1,"2":arg2} var cacheKey = JSON.stringify(Array.prototype.slice.call(arguments)), result; if(!myFunc.cache[cacheKey]){ result = {}; myFunc.cache[cacheKey] = result; } return myFunc.cache[cacheKey]; } myFunc.cache = {};
这种方式用在哪用合适呢?
举个例子,电商里商品要按照不同的条件进行排序,用户很可能多次切换排序,如果这里是用ajax实现的,那根据sort的方式不同,查询结果将被保存,当再次选择已经选择过的排序方式的时候,获得数据将不用再次调用接口,直接用缓存里获得。现在还没有看过jquery的源码,不过,jquery的ajax方法里的cache,很可能就是用类似的方法实现的吧。举一反三吧,睡觉!