javascript设计模式8代理模式
代理模式是非常常用的一种模式,顾名思义,为两个对象之间添加一层代理,通过代理访问想要访问的对象,而不是直接去访问或修改。
虚拟代理
//图片预加载代理
var myImg= (function(){
var imgnode = document.createElement('img')
document.body.appendChild(imgnode)
return {
setSrc : function(src){
imgnode.src = src;
}
}
})()
var proxyImg = (function(){
var img = new Image;
img.onload = function(){
myImg.setSrc(this.src)
}
return {
setSrc: function(src){
myImg.setSrc('file:// /c:/user/loading.gif')
img.src = src;
}
}
})()
proxyImg.setSrc('http:// qq.com/photo.jpg')
缓存代理
var mult = funcion(){
var a = 1;
for(var i = 0 , l = arguments.length; i < l ;i++){
a = a* arguments[i];
}
return a;
}
var proxyMult = (function(){
var cache = {}
return function(){
var args = Array.prototype.join.call(arguments,',')
if(args in cache){
return cache[args]
}
return cache[args] = mult.apply(this,arguments)
}
})()
proxyMult(1,2,4
使用高阶函数动态创建代理
var mult = funcion(){
var a = 1;
for(var i = 0 , l = arguments.length; i < l ;i++){
a = a* arguments[i];
}
return a;
}
var createProxyFactory = function(fn){
var cache = {}
return function(){
var args = Array.prototype.join.call(arguments,',')
if(args in cache){
return cache[args]
}
return cache[args] = fn.apply(this,arguments)
}
}
var proxyMult = createProxyFactory(mult)
proxyMult(1,3,4)
Think Different, Make Different-编程是一个习惯

浙公网安备 33010602011771号