如何控制对对象的访问?
前言
代理模式,即对一个对象设置代理,以控制对该对象的访问。
常用代理模式:
- 保护代理
代理可以过滤掉对对象的不必要访问
- 虚拟代理
代理先收集访问请求,处理,在必要的时候再对对象进行访问。原则是收集请求
叫虚拟代理的原因:最后肯定会访问对象,只不过在代理处进行了延迟,就像是虚拟了一个对象进行访问。
图片预加载
let imgEle = function () {
let img = document.createElement('img')
document.body.appendChild(img)
return {
setSrc (src) {
img.src = src
}
}
}()
let imgProxy = function (src) {
let img = new Image()
img.onload = function () {
imgEle.src = src
}
return {
setSrc (src) {
img.src = src
imgEle.setSrc('loading.gif')
}
}
}
此处代理了加载图片的过程,加载完图片之后才必须访问原 img添加 src,所以这是一个虚拟代理。
需要注意,尽可能保持代理方法与原方法用法一致。
- 缓存代理
对一些开销较大的运算进行缓存处理
//计算乘积
let mult = function(){
let result = 1;
for(let i = 0,len = arguments.length;i < len;i++){
result*= arguments[i];
}
return result;
}
//缓存代理
let proxy = (function(){
let cache = {};
reutrn function(){
let args = Array.prototype.join.call(arguments,',');
if(args in cache){
return cache[args];
}
return cache[args] = mult.apply(this,arguments);
}
})();
Gitalking ...
Be the first guy leaving a comment!