首页 > 代码库 > Javascript备忘模式

Javascript备忘模式

使用备忘模式,利用了函数的自定义属性,先看一个例子

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,很可能就是用类似的方法实现的吧。举一反三吧,睡觉!