1. function createHandler () {
    2. return {
    3. get (target, key, receiver) {
    4. // Proxy 中的 get 的 receiver 是 当前创建的Proxy 对象,或者继承当前Proxy对象的子对象
    5. if (key === 'foo') {
    6. return '这是一个很神奇的属性'
    7. }
    8. return Reflect.get(target, key, receiver)
    9. },
    10. set (target, key, value, receiver) {
    11. return Reflect.set(target, key, value, receiver)
    12. },
    13. deleteProperty(target, key) {
    14. return Reflect.deleteProperty(target, key)
    15. }
    16. }
    17. }
    18. const proxy = new Proxy(obj, createHandler())

    Reflect: reflect是借鉴jave.c#的反射的一个概念。
    反射不允许在代码运行期间直接操作对象,这个时候就可以使用Relect进行反射
    Object.getOwnProperty等Object方法其实就是reflect的一种引用
    Reflect.set放回一个boolean类型的值
    Proxy
    receiver: 是proxy对象