<script>
var person = {
'name': '张三',
'age': 20
}
var pro = new Proxy(person, {
get(target, property) {
return '李四'
}
})
console.log(pro.name)
console.log(pro.age)
let zhang = {
location: '市区',
housePrice: '20000',
time: '2017-08-05'
}
let intermediaryAgent = new Proxy(zhang, {
get(target, property) {
console.log(target)
console.log(property)
if (property == 'housePrice') {
return target[property] * 1.2
} else if (property == 'location') {
return '位于市区,购物方便'
}
return target[property]
}
})
console.log(intermediaryAgent.location);
console.log(intermediaryAgent.housePrice);
console.log(intermediaryAgent.time);
</script>
2、set方法
参数 target当前对象 property 设置的那个属性 value 代表给属性赋的值是
作用,给属性值处理后设置值
<script>
// var bankAccount = { 'RMB': 1000, 'dollar': 0 };
// var banker = new Proxy(bankAccount, {
// get: function (target, property) {
// if (target[property] > 0) {
// return target[property];
// } else {
// return '余额不足'
// }
// },
// set: function (target, property, value) {
// if (!Number.isInteger(value)) {
// return '请设置正确的数值'
// }
// target[property] = value
// }
// })
// console.log(banker.RMB)
// console.log(banker.dollar)
let account = {
balance: 10000,
phone: '12345678912',
name: 'zhgr',
age: undefined
}
let bank = new Proxy(account, {
get(target, property) {
return target[property]
},
// target 代表代理对象
// property 代表我们设置的是哪个属性
// value 代表给这个属性赋的值是什么
set(target, property, value) {
console.log(target);
console.log(property)
console.log(value);
if(property =='drawMoney'){
if(target.balance>value){
target.balance =target.balance-value
}else{
alert ('余额不足')
}
}
},
})
bank.drawMoney = 20000;
bank.drawMoney = 5000;
console.log(bank.balance)
</script>
3、ownKeys:截获 只给该代理相应属性,其他属性获取不到
ownKeys: function (target) { return balance;//截获 只给该代理一个参数,其他属性获取不到 },
console.log(Object.keys(bank))
4、has()方法用于是判断是否含有指定的键值对。有,就返回true。否则返回false。
has(target,property){ if (target[property] == undefined) { return false } else { return true } }
console.log('age' in bank);
console.log('name' in bank);
5、apply方法 ,函数可以被代理。使用apply调用。
let fn = function(){ console.log("被代理函数") } let fn1 = new Proxy(fn,{ apply: function(){ console.log("代理") } }) fn1();//代理
6、Proxy.revocable方法
(可废止的,可撤回的;)函数来实现,它会返回一个对象,对象中含有一个proxy属性,它就是Proxy的代理实例对象;还有一个revoke属性,它是一个方法,用于取消代理。
let person = {"name":"张三"};
//处理程序
let handLe = {
get : function(target,prop){
return "李四";
}
};
//使用Proxy.revocable()进行代理
let obj = Proxy.revocable(person,handLe);
console.log(obj.proxy.name);//李四
//revoke 取消代理
obj.revoke();
console.log(obj.proxy.name);//报错代理被取消
浙公网安备 33010602011771号