zoukankan      html  css  js  c++  java
  • 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,很可能就是用类似的方法实现的吧。举一反三吧,睡觉!

  • 相关阅读:
    odbc 连接字符串
    25个国外优秀电子商务网站设计案例
    用css 添加手状样式,鼠标移上去变小手,变小手
    js如何获得FCKeditor控件的值
    导致Asp.Net站点重启的10个原因
    分享45款高质量的免费(X)HTML/CSS模板
    20110627 VisualSVN安装与配置(Delphi72010/VS2010)
    iBatis把一个表的sqlmap配置的多个xml中。
    ASP.NET State Service
    存储过程分页
  • 原文地址:https://www.cnblogs.com/liqingchang/p/3719859.html
Copyright © 2011-2022 走看看