本文最后更新于 2024-03-23T16:42:02+00:00
代理模式:为对象的操作提供一个替代或代理接口。
代理模式允许我们在访问目标对象之前、之后或者代替目标对象执行额外的操作,从而对原始对象的行为进行增强、控制、限制或者扩展。
动态代理:在运行时动态生成代理类及其实例
ES6 的 Proxy 就是一个代理,它对对象的增删改查进行拦截代理,可自定义执行操作
虚拟代理:在运行时去执行操作,节省开销
场景:实现图片的懒加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const createImage = () => { const imgEl = document.createElement('img')
document.body.appendChild(imgEl)
return { setUrl(src) { imgEl.src = src } } }
const { setUrl } = createImage()
const createImageProxy = () => { const img = new Image()
img.onload = function(){ setUrl(this.src) }
return { setUrl(src) { setUrl('http://imgcache.qq.com/loading.jpg')
img.src = src } } }
createImageProxy().setUrl('http://imgcache.qq.com/Kdhwbas.jpg')
|
保护代理:用于控制对目标对象的访问,比如限制对某些敏感信息或方法的访问权限。
总结:本质就是套一层过滤壳,壳里面再去调用真正的方法