什么是代理模式?举个例子:比如有小明,小王,小红三个人, 小明需要向小红传递信息,但是两人不熟悉,他们有个共同的朋友小王,可以通过小王把信息传递给小红,小王就充当了代理的角色
代理模式案例:图片预加载
var myImg = (function () {
const img = document.getElementById('img')
return {
setSrc: function (src) {
img.src = src
}
}
})()
var proxyImg = (function () {
const newImg = new Image()
newImg.onload = function () {
myImg.setSrc(this.src)
}
return {
setSrc: function (src) {
myImg.setSrc('../loading.gif')
newImg.src = src
}
}
})()
const btn = document.getElementById('btn')
btn.addEventListener('click', ()=>{
proxyImg.setSrc('../datu.jpg')
})
案例2:缓存
function add() {
console.log(arguments)
let count = 1
for(let i = 0; i < arguments.length; i++) {
count = count * arguments[i]
}
return count
}
const proxyAdd = (function () {
let cacheMap = new Map()
return function () {
let currentKey = Array.prototype.join.call(arguments, ',')
if(!cacheMap.has(currentKey)) {
let value = add.apply(this, arguments)
cacheMap.set(currentKey, value)
return value
}
return cacheMap.get(currentKey)
}
})()
console.log(proxyAdd(1, 2, 3));
console.log(proxyAdd(1, 2, 3));