<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);//报错代理被取消