ES2018(ES9) -------------------------------- proxy: 代理 扩展(增强)对象、方法(函数)一些功能 比如: Vue Vue.config.keyCodes.enter=65 Proxy作用: 比如vue中拦截 预警、上报、扩展功能、统计、增强对象等等 proxy是设计模式一种, 代理模式 -------------------------------- let obj ={ name:'foo' }; //您访问了name obj.name // foo -------------------------------- 语法: new Proxy(target, handler); let obj = new Proxy(被代理的对象,对代理的对象做什么操作) handler: { set(){}, //设置的时候干的事情 get(){}, //获取干的事情 deleteProperty(){}, //删除 has(){} //问你有没有这个东西 ‘xxx’ in obj apply() //调用函数处理 ..... } 实现一个,访问一个对象身上属性,默认不存在的时候给了undefined,希望如果不存在错误(警告)信息: --------------------------------------------------- DOM.div() DOM.a(); DOM.ul() --------------------------------------------------- set(), 设置,拦截: 设置一个年龄,保证是整数,且范围不能超过200 deleteProperty(): 删除,拦截: has(): 检测有没有 --------------------------------------------------- apply() :拦截方法 --------------------------------------------------- Reflect.apply(调用的函数,this指向,参数数组); fn.call() fn.apply() 类似 Reflect: 反射 Object.xxx 语言内部方法 Object.defineProperty 放到Reflect对象身上 通过Reflect对象身上直接拿到语言内部东西 'assign' in Object -> Reflect.has(Object, 'assign') delete json.a -> Reflect.deleteProperty(json, 'a');