// 虚拟代理实现图片预加载
let myImage = (function(){
let imgNode = document.createElement('img');
document.body.appendChild(imgNode);
return {
setSrc: function (src) {
imgNode.src = src
}
}
})()
let proxyImage = (function(){
let img = new Image;
img.onload = function(){
myImage.setSrc (this.src)
}
return {
setSrc: function(src){
myImage.setSrc('file:///E:/手里上整理出来的照片/网上收集的照片/山川河流.jpg');
img.src = src
}
}
})()
proxyImage.setSrc('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1560840791&di=976399fb61f71f4597347ca330dcf84a&imgtype=jpg&er=1&src=http%3A%2F%2Ffile.elecfans.com%2Fweb1%2FM00%2F81%2FF7%2Fo4YBAFw9O2aAIU4lAAKUIw4770I426.png')
复制代码
<input type="checkbox" id="1" />1
<input type="checkbox" id="2" />2
<input type="checkbox" id="3" />3
<input type="checkbox" id="4" />4
<input type="checkbox" id="5" />6
<input type="checkbox" id="7" />7
<input type="checkbox" id="8" />8
<input type="checkbox" id="9" />9
<script>
// 虚拟代理合并 HTTP 请求
let synchronousFile = function(id) {
console.log("开始同步文件id为" + id);
};
let proxySynchronousFile = (function(){
let cache = [],
timer;
return function (id){
cache.push(id);
if (timer) { // 保证不会覆盖已经启动的定时器
return
}
timer = setTimeout(function(){
synchronousFile(cache.join(','));
clearTimeout(timer);
timer = null;
cache.length = 0; // 清空数组
},2000)
}
})()
let checkbox = document.getElementsByTagName("input");
for (var i = 0, c; c = checkbox[i++];) {
c.onclick = function() {
if (this.checked === true) {
proxySynchronousFile(this.id);
}
};
}
</script>
复制代码
let mult = function(){
console.log('开始计算乘积');
var a = 1;
for(var i = 0, l = arguments.length; i < l; i++){
a = a * arguments[i]
}
return a;
};
let proxyMult = (function(){
let cache = {};
return function(){
let args = Array.prototype.join.call(arguments, ',')
if (args in cache) {
return cache[ args ]
}
return cache[ args ] = mult.apply( this, arguments)
}
})();
proxyMult(1,2,3,4) // 24
proxyMult(1,2,3,4) // 24
复制代码
该资料来源曾探著的《设计模式与开发实践》javascript