Proxy === 中间商
二哈哥: ”我不想看废话,不想了解历史,只想知道它怎么用”
我: “好,点击
- 这里‘
Proxy,英文名 : 代理,代理的。
ES6新属性(ie浏览器就别问了)。
这个属性可以直接看成是一个中介工作(我要复杂化)。在做这个工作时,会涉及到收租问题。问题来了。房东给了你一个5000一月的房子
house = { RMB : ‘5000’ }
你计划将这个房子放在平台上(参数:house—房子,handler—房子描述和租金)
pingtai = new Proxy(house, handler)
house:那个房子
Handler: (get,set两个函数)你房子信息,以及房子信息修改操作(我要收中介费。恰饭的!)
举个栗子
二哈哥:房子500,我一个月租8000,中间商,赚差价,买家多花钱,卖家收不到钱。
var house = {
RMB : "500"
}
//代理
house = new Proxy(house, {
set(target, key, value) {
if (key === "RMB" && typeof value !== "number") {
throw Error("RMB是金钱类型的呀,必须要数字 ");
}
// return Reflect.set(target, key, value); //中介软件自带工具,推荐使用
target[key] = value;
console.log('买的了吃亏,买的了上当')
return true; //防止报错,不信你试试
}
})
发布平台信息 console.log(house.RMB = 8000);
金毛哥:房子500,我一个月租500,只想炫耀家里有矿,还有富婆(不涉及修改的话,只需要使用get函数即可)。
var house = {
RMB : "500"
}
//代理
house = new Proxy(house, {
get(target, key) {
return target[key] += "家里有矿,还有富婆"
}
})
发布平台信息 console.log(house.RMB)
- <a id="main">OK</a>,现在开始就是正式信息了。
Proxy:作用,代理对象的属性,进行对象的属性修改和修饰。
双向数据绑定Demo : https://blog.csdn.net/I_recluse/article/details/104110531
直接Demo(当用户定义obj对象中的name属性时,打印修改前的名字,将输出名字修改成‘二哈哥’)
var obj = new Proxy(obj, {
set(target, key, value) {
console.log(value)
key == 'name' && (target[key] = '二哈哥') ;
return true
}
})