问题一: set 和 deleteProperty 中需要返回布尔类型的值;

  1. 在严格模式下,如果返回 false 的话会出现 Type Error 的异常;
  2. 示例代码:
    'use strict'
    
    const target = {
        foo: 'xxx',
        bar: 'yyy'
    }
    
    const proxy = new Proxy(target, {
        get(target, key, receiver) {
            // return target[key]
            return Reflect.get(target, key, receiver)
        },
        set(target, key, value, receiver) {
            // target[key] = value // 使用该种方式严格模式下会报错
            return Reflect.set(target, key, value, receiver)
        },
        deleteProperty(target, key) {
            // delete target[key] // 使用该种方式严格模式下会报错
            return Reflect.deleteProperty(target, key)
        }
    })
    
    proxy.foo = 'zzz'
    // delete proxy.foo
    

问题二:Proxy 和 Reflect 中的 receiver

  1. 「Proxy 中 receiver」:Proxy 或者继承 Proxy 的对象;

  2. 「Reflect 中 receiver」:如果 target 对象中设置了 getter,getter 中的 this 指向 receiver;

  3. 示例代码:

    JavaScript
    JavaScript
    const obj = {
      get foo() {
        // 此时的 this 是obj
        console.log(this)
        return this.bar
      }
    }
    
    const proxy = new Proxy(obj, {
      get(target, key, receiver) {
        if (key === 'bar') {
          return 'value - bar'
        }
        return Reflect.get(target, key)
      }
    })
    
    console.log(proxy.foo)
    
    const obj = {
      get foo() {
        // 此时的 this 是代理对象 receiver
        console.log(this)
        // 'value - bar',this.bar 会执行 proxy 的 get
        return this.bar
      }
    }
    
    const proxy = new Proxy(obj, {
      get(target, key, receiver) {
        if (key === 'bar') {
          return 'value - bar'
        }
        return Reflect.get(target, key, receiver)
      }
    })
    
    console.log(proxy.foo)
    
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 问题一: set 和 deleteProperty 中需要返回布尔类型的值;
  2. 2. 问题二:Proxy 和 Reflect 中的 receiver