20190124Q:如何理解es6中的Proxy?试题解析:对proxy的理解可能会延伸到Vue的双向绑定Proxy(代理)。定义可以理解为对目标对象设置一层拦截。外部对对象的访问必须经过这一层拦截。简单示例:constobj=newProxy({},{get:(target,key,receiver)=>{return'JS'console.log(`get${key}`)},set:(target,key,value,receiver)=>{console.log(`set${key}`)},})obj.name='JS每日问题'//setname//JS每日问题obj.name//entergethereCallback函数,都是直接返回JS从上面的例子可以看出,Proxy有一种机制,可以重写外部的读写操作。代理实例方法proxy除了代理get和set操作外,还可以代理其他操作,如下handler.getPrototypeOf()//当读取到代理对象的原型时触发该操作,比如当Object.getPrototypeOf(proxy)被执行。handler.setPrototypeOf()//当设置代理对象的原型时触发该操作,比如执行Object.setPrototypeOf(proxy,null)时。handler.isExtensible()//在判断代理对象是否可扩展时触发该操作,比如执行Object.isExtensible(proxy)时。handler.preventExtensions()//当代理对象不可扩展时触发此操作,例如当执行Object.preventExtensions(proxy)时。handler.getOwnPropertyDescriptor()//在获取代理对象的某个属性的属性描述时触发该操作,比如执行Object.getOwnPropertyDescriptor(proxy,"foo")时。handler.defineProperty()//当定义代理对象的某个属性的属性描述时触发该操作,比如执行Object.defineProperty(proxy,"foo",{})时。handler.has()//在判断代理对象是否有属性时触发该操作,比如在proxy中执行“foo”时。handler.get()//在读取代理对象的某个属性时触发该操作,比如执行proxy.foo时。handler.set()//当给代理对象的某个属性赋值时触发这个操作,比如执行proxy.foo=1的时候。handler.deleteProperty()//当代理对象的某个属性被删除时触发该操作,比如执行deleteproxy.foo。handler.ownKeys()//当获取到代理对象的所有属性键时触发该操作,比如执行Object.getOwnPropertyNames(proxy)时。handler.apply()//当调用目标对象为函数的代理对象时触发该操作,比如执行proxy()时。handler.construct()//在构造目标对象为构造函数的代理对象实例时触发该操作,比如执行newproxy()时。为什么要使用Proxy来拦截和监控外部对对象的访问降低函数或类的复杂度在复杂操作或管理所需资源之前验证操作Day1问题:什么是前端缓存?适用于哪些场景?有什么不同?JS每日一问:Call、Apply、Bind的使用和区别,如何实现一个bind?JS日报提问:说说你对前端模块化的理解JS日报提问:Web安全攻击手段有哪些?以及如何预防JS每日题JS每日题可以看作是一个语音答题社区,利用碎片化的时间,每天60秒内以语音的形式完成当天的考题。组长会在次日0:00推送当天的参考答案注意,不局限于完成当天的任务,更多的是查漏补缺,学习优秀的答题思路小组中的其他学生。点击加入答案
