var person ={name:"张三",age:20,sex:"男",}//创建一个代理 proxy,代理person对象//第一个参数:要代理的对象//第二个参数:对象的方法var proxy =newProxy(person,{get(target, property){//target:所要拦截的目标对象 //property:属性 参数也是一个对象,用来定制拦截行为if(property =="age"){return18}}})
console.log(proxy.age);//18
set(target,property,value) 拦截对象的写操作
value:需要修改的值
let car ={price:10000,color:"white",power:"v8"}//创建一个代理 代理carvar proxCar =newProxy(car,{//value:需要更改的值set(target, property, value){
target[property]= value//对象的属性 = 要修改的属性}})
proxCar.color ="black"//修改属性的值
console.log(proxCar.color);//black
ownKeys()拦截操作
拦截过滤Object.keys()对对象的属性遍历。
let person ={name:"老王",age:"40",height:1.8}//创建一个代理对象personlet proxy =newProxy(person,{//ownKeys拦截操作,拦截过滤Object.keys()对对象的属性遍历。ownKeys(target){return["name","age"]}})
console.log(Object.keys(person));//['name', 'age', 'height']
console.log(Object.keys(proxy));//['name', 'age']
has( )拦截操作:拦截key in object的操作,结果会返回一个布尔值。
var person ={name:"张三",age:20}var person =newProxy(person,{// has( )拦截操作:拦截key in object的操作,结果会返回一个布尔值。//has( )方法用于是判断是否含有指定的键值对,有,就返回true。否则返回falsehas(target, prop){if(target[prop]===undefined){returnfalse}else{returntrue}}})// key in object 判断属性是否存在对象中
console.log("name"in Proxy);//true
console.log("aaa"in Proxy);//false
var arr =[1,2,3,4]for(let[key,value]of arr.entries()){
console.log(key,value)//键和值都可以输出}
for(let key of arr){//获取索引 if(key ==2){continue//索引为2 可以跳出当前循环}
console.log(key);//1 3 4}
支持字符串的遍历
let word ="我是前端君"for(let w of word){
console.log(w)//我 是 前 端 君}
用for of输出值 索引
var arr =[1,2,3,4,5]for(let key of arr.keys()){
console.log(key);//索引}for(let value of arr.values()){
console.log(value);//值}for(let[key, value]of arr.entries()){
console.log(key, value);//输出值和索引}