当本体处于保护、缓存、虚拟或者过滤等情况下时,一个数据不适合被访问或者一个方法不能被直接调用,可以采用代理模式,先创建一个代理(本体对象或者方法的替身),作为访问者和本体之间的中介或者桥梁。
本体访问和代理访问的区别不使用代理:访问 ==> 本体使用代理:访问 ==> 代理 ==> 本体
1、图片预加载
// 本体
var myImage = (function () {var imgNode = document.createElement('img');document.body.appendChild(imgNode);return {setSrc: function (src) {imgNode.src = src;}}
})()
// 代理
var proxyImage = (function(){var img = new Image(); img.onload = function(){myImage.setSrc( this.src );} return { setSrc: function( src ){ myImage.setSrc( '预加载的图片' ); img.src = src;} }
})();
以上是本体和代理,都有相同的接口setSrc,有以下两种访问方式:
- 直接访问本体
myImage.setSrc("目标图片地址")
如果网速不太好,直接访问本体,那么会出现图片一截一截出现的情况。
- 访问代理对象
proxy