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 ...
随机推荐
- php,blade语法
打印数组 <?php print_r($agreement);die?> <?= ?><?php echo ?><?php printf();die;?> ...
- codefroces 589A
time limit per testsecondsmemory limit per testmegabytesinputstandard inputoutputstandard outputPoly ...
- Codeforces Round #345 (Div. 2)
DFS A - Joysticks 嫌麻烦直接DFS暴搜吧,有坑点是当前电量<=1就不能再掉电,直接结束. #include <bits/stdc++.h> typedef long ...
- HIVE 创建外部分区表--利用HUE不能创建外部表
Create EXTERNAL table obd_data_2( imei string, ts timestamp, fuel_instant float, gps_speed float, gp ...
- Ue4中的框选函数
void AHUD::GetActorsInSelectionRectangle(TSubclassOf<class AActor> ClassFilter, const FVector2 ...
- Oracle 查询性能优化实践
1.索引使用原则 不要对索引使用全模糊,但是 LIKE 'asdf%'是可以的,即不要Contains,可用StartWith 不要对索引进行函数,表达式操作,或者使用is null判断,否则 ...
- C#生成PDF文档,读取TXT文件内容
using System.IO;using iTextSharp.text;using iTextSharp.text.pdf; //需要在项目里引用ICSharpCode.SharpZipLib.d ...
- -bash: /bin/rm: Argument list too long的解决办法
当目录下文件太多时,用rm删除文件会报错: -bash: /bin/rm: Argument list too long 提示文件数目太多. 解决的办法是使用如下命令: rm -fr ls 输出所有的 ...
- AIM Tech Round 3 (Div. 2)
#include <iostream> using namespace std; ]; int main() { int n, b, d; cin >> n >> ...
- .htaccess 的写法
RewriteCond RewriteRule 记录下现在我会的: RewriteEngine On#RewriteRule ^(.*)/(.*)/$ index.php?m=index&c= ...