码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript备忘模式

时间:2014-05-10 07:05:48      阅读:333      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

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

var test = function (){}
test.myAttr = "attr";

这样,就给test加上了一个自定义的属性,myAttr。

备忘模式,正式利用了这个方法,将已经运行过的结果存储起来,将函数接受到的参数作为key,将函数运行的结果作为value返回即可。代码如下

bubuko.com,布布扣
var myFunc = function (param) {
    if(!myFunc.cache[param]){
        var result = {};
     //...各种操作 myFunc.cache[param]
= result; } return myFunc.cache[param]; } myFunc.cache = {};
bubuko.com,布布扣

上面的写法,只适用于参数只有一个的情况,但实际情况中不会都是这样,因此可以考虑将参数转化为字符串,作为缓存对象里的key值,以哈希对象的形式保存

bubuko.com,布布扣
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 = {};
bubuko.com,布布扣

这种方式用在哪用合适呢?

举个例子,电商里商品要按照不同的条件进行排序,用户很可能多次切换排序,如果这里是用ajax实现的,那根据sort的方式不同,查询结果将被保存,当再次选择已经选择过的排序方式的时候,获得数据将不用再次调用接口,直接用缓存里获得。现在还没有看过jquery的源码,不过,jquery的ajax方法里的cache,很可能就是用类似的方法实现的吧。举一反三吧,睡觉!

 

Javascript备忘模式,布布扣,bubuko.com

Javascript备忘模式

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/liqingchang/p/3719859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!