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,很可能就是用类似的方法实现的吧。举一反三吧,睡觉!
Javascript备忘模式的更多相关文章
- 11. 星际争霸之php设计模式--备忘模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- javascript 备忘 细节 相关
DOMContentLoaded事件触发时机,即dom tree完成但页面未必渲染完毕. var a = [1,2,3,4]; var length = a.length; alert((leng ...
- Javascript备忘复习笔记2
一.函数与形参 1.函数 function abs(x) { if (x >= 0) { return x; } else { return -x; } } alert(abs(-10)); 2 ...
- Javascript备忘
js输出对象类型: Object.prototype.toString.apply(s) 设置单行点击效果: obj.style.background = "#efefef";se ...
- Javascript 备忘
1遍历所有属性 var person={fname:"John",lname:"Doe",age:25}; for (x in person) { txt=tx ...
- Javascript备忘复习笔记1
一.字符串操作 1.大小写 var s = "hello"; undefined g = s.toUpperCase(); "HELLO" g; "H ...
- 【读书笔记】读《JavaScript模式》 - JavaScript函数常用模式
API模式:回调模式.配置对象.返回函数: 初始化模式:即时函数.即时对象初始化.初始化分支: 性能模式:备忘模式.自定义模式 //*********************** API模式 **** ...
- javascript优化--05模式(函数)
回调函数模式: 基本例子: var findNodes = function (callback) { ...................... if (typeof callback !== ' ...
- javascript设计模式-迭代器模式(Iterator)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 玩转Docker镜像
镜像是Docker最核心的技术之一,也是应用发布的标准格式.无论你是用docker pull image,或者是在Dockerfile里面写FROM image,从Docker官方Registry下载 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- 每天一个linux命令--su
su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成root身份了. [richmail@porta ...
- ReSharper 配置及用法(二)
下载工具 一:Reshaper是什么 即便是那些整天攻击 .NET 和 C# 的人,也常常不得不承认 Visual Studio 确实是个够强大的 IDE,除非他认为更少的 IDE 功能和命令行调试才 ...
- (转)Ubuntu samba配置服务文件包
转:http://os.51cto.com/art/201001/176366.htm Ubuntu samba服务配置是很不错的文件应用很有学习价值,这里我主要讲解Ubuntu samba服务配置的 ...
- 熟悉熟悉常用的几个算法用JS的实现
(1)数组去重 原理:定义一个对象obj,然后把数组元素作为obj的属性名,利用属性名是否重复进行判重 1 var unique = function(arr){ 2 let obj = {}; 3 ...
- sublime注释插件与javascript注释规范
前言 代码中注释是不可少的,即使是自己写的代码,过了一段时间之后再重看,如果没有注释记录的话,可能会想不到当初是这样实现的,尤其是在业务逻辑比较复杂的项目,注释变得尤为重要.怎么优雅的写有用的注释呢? ...
- 洛谷 P1144 最短路计数 Label:水
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
- 【BZOJ】2675: Bomb
题意: 给n个点,任选其中3个点(一个点只能取一次),求选出三个点的最大曼哈顿距离之和与最小曼哈顿距离之和(n<=10^5). 题解: 最大曼哈顿距离之和很好求,就是能包围所有点的经过三个点的矩 ...
- 【CodeVS】 p1696 奇怪的函数
题目描述 Description 自从得到上次的教训后,John的上课态度认真多了,也变得更爱动脑筋了.今天他又学习了一个新的知识:关于 xk 的位数. 如果x大于0小于l,那么位数=1+小数部分×k ...