javascript 对象池
* 一个对象池的简单应用 tool tip
tootip.html
<html>
<head>
<meta charset="UTF-8">
<title>tool tip</title>
</head>
<body>
<script type="text/javascript" src="js/toolTip.js"></script>
</body>
</html>
js/toolTip.js
var toolTipFactory = (function() {
var toolTipPool = []; return {
create: function() {
if (toolTipPool.length === 0) {
var div = document.createElement("div");
document.body.appendChild(div);
console.log("div created");
return div;
} else {
return toolTipPool.shift();
}
},
recover: function(toolTipDom) {
return toolTipPool.push(toolTipDom);
}
}
})(); var a = [];
for (var i = 0, str; str = ['A', 'B'][i]; i++) {
var toolTip = toolTipFactory.create();
toolTip.innerHTML = str;
a.push(toolTip);
}
// 回收进对象池
a.forEach(function(toolTip) {
toolTipFactory.recover(toolTip);
}); // 再创建6个小气泡
setTimeout(function() {
['A', 'B', 'C', 'D', 'E', 'F'].forEach(function(str) {
var toolTip = toolTipFactory.create();
toolTip.innerHTML = str;
});
}, 500);
Run:
php -S 0.0.0.0:9000
A, B没有重复创建
* 通用对象池的实现
iframe.html
<html>
<head>
<meta charset="UTF-8">
<title>通用对象池 创建iframe测试</title>
</head>
<body>
<script src="./js/iframe.js"></script>
</body>
</html>
js/iframe.js
var objectPoolFactory = function(createObjFn) {
var objectPool = []; return {
create: function() {
var obj = objectPool.length === 0 ?
createObjFn.apply(this, arguments) : objectPool.shift();
return obj;
},
recover: function(obj) {
objectPool.push(obj);
}
}
}; // test
var iframeFactory = objectPoolFactory(function() {
var iframe = document.createElement('iframe');
document.body.appendChild(iframe); iframe.onload = function() {
iframe.onload = null; // 防止iframe重复加载
iframeFactory.recover(iframe); // iframe加载完了回收节点
}
return iframe;
}); var iframe1 = iframeFactory.create();
iframe1.src = 'https://www.baidu.com'; var iframe2 = iframeFactory.create();
iframe2.src = 'http://www.qq.com/'; setTimeout(function() {
var iframe3 = iframeFactory.create();
iframe3.src = 'http://www.163.com';
}, 750);
Run:
javascript 对象池的更多相关文章
- javascript设计模式学习之四——单例模式,缓存与对象池
单例模式的定义:确保一个实例,并提供全局访问. 惰性单例的定义:只在需要的时候才创建对象. 在开发中,有些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等. java中的单例 关 ...
- json与JavaScript对象互换
1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...
- javaScript对象-基本包装类型的详解
本人按书上的内容大致地把javaScript对象划分成“引用类型”.“基本包装类型”和“内置对象”三块内容. 我们这篇先了解下基本包装类型的详细用法吧! 一.我们先解下相关概念: 1.引用类型的值(对 ...
- 如何理解javaScript对象?
在我们生活中,常常会提到对象一词,如:你找到对象了吗?你的对象是谁呀?等等. 在我们家庭中,有男友的女青年都会说我有对象了,那么她的对象是XX(她的男友). 夫妻间呢?都会说我的爱人是谁谁谁,现在我们 ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
- 深入理解javascript对象系列第二篇——属性操作
× 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...
- Javascript对象的方法赋值
Javascript对象编程学习中,一直不能很好的掌握对象的属性(property)和方法(method).今天在写代码过程中,又犯了一个低级错误. <!DOCTYPE html> < ...
- web前端学习(二) javascript对象和原型继承
目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...
- 如何判断Javascript对象是否存在
Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...
随机推荐
- STM32—4线SPI驱动SSD1306 OLED
文章目录 一.OLED简介 二.驱动SSD1306所需知识 1.引脚介绍 2.通信时序 3.显存GRAM 4.字库 5.SSD1306基本命令 三.代码讲解 1.相关引脚配置 2.模拟SPI通信 3. ...
- 从安装到使用——Odoo常见问题及故障处理
小九今天分享了Odoo一键部署.高效安装的图文详解,接下来,针对Odoo使用过程中的一些问题,小九整理了详细的常见问题问答.这样的直观方式往往能快速高效地解决一些疑惑. 也欢迎提出其他问题,共同探讨, ...
- 题解 P3941 入阵曲
题解 观察数据范围,可以 \(\mathcal O(n^2m^2)\) 暴力计算,而加上特殊性质,则可以骗到 \(75pts\) 正解: 我们发现,在一维情况下,\(\mod k\) 相同的前缀和相减 ...
- 题解 P6271 [湖北省队互测2014]一个人的数论
通过这道题学了伯努利数,写篇题解推一下 题目 先推一下式子 \[\sum_{i=1}^ni^d[gcd(i,n)=1] \] \[\sum_{i=1}^{n}i^d\sum_{k|i}\sum_{k| ...
- uwp Button的动态效果
你应该覆盖Button样式 <Page.Resources> <Style TargetType="Button" x:Key="CustomButto ...
- asp.net core 中的路由
- 【spring 注解驱动开发】扩展原理
尚学堂spring 注解驱动开发学习笔记之 - 扩展原理 扩展原理 1.扩展原理-BeanFactoryPostProcessor BeanFactoryPostProcessor * 扩展原理: * ...
- C#设计模式---模板方法模式(Template Method Pattern)
一.目的 模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码. 二.定义 模板方法模式:在一个抽象类中定义一个操作的算法骨架,将算法骨架中某些特定的操作延迟到子类中实现. 模板方法使得子类在 ...
- Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记
GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...
- vue+vant实现购物车的全选和反选业务,带你研究购物车的那些细节!
前言 喜欢购物的小伙伴看过来,你们期待已久的购物车来啦!相信小伙伴逛淘宝时最擅长的就是加入购物车了,那购物车是如何实现商品全选反选的呢?今天就带你们研究购物车的源码,以vue+vant为例. 正文 首 ...