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

  • 相关阅读:
    excel合并单元格
    layer单元格合并
    跨域打开页面:Uncaught DOMException: Blocked a frame with origin
    nginx配置ws
    123
    java集合框架初探-迭代器
    java集合框架初探
    123123
    java switch
    java-测试开始map基本操作
  • 原文地址:https://www.cnblogs.com/liqingchang/p/3719859.html
Copyright © 2011-2022 走看看