【问题标题】:Applying proxy to an object将代理应用于对象
【发布时间】:2019-12-02 01:15:48
【问题描述】:

您好,我正在尝试将对象转换为代理,而不更改对对象的引用:

这是一个简单的类:

class Foo {
  constructor () {
    this.a = 'bar'
  }
}
const foo = new Foo()

这是我的代理:

const proxy = new Proxy(foo, {
  get () {
    return 'proxy-bar'
  },
  set () {
    // Don't do anything
    return true
  }
})

这是该代理的正常使用:

console.log(foo.a) // bar
console.log(proxy.a) // proxy-bar

现在,我想继续使用foo,但具有proxy 的功能。所以我尝试使用Object.assign,它似乎只适用于getter,但不适用于setter。我想念他们的东西吗?

Object.assign(foo, proxy)
console.log(foo.a) // Getter works: proxy-bar

foo.a = 'proxy-proxy-bar'
console.log(foo.a) // Setter does not work: proxy-proxy-bar

【问题讨论】:

  • 将对象转换为代理,而不更改对对象的引用” - 这根本不可能。您首先需要创建foo 作为代理,这是没有办法的。

标签: javascript


【解决方案1】:

您可以在构造函数中应用代理并返回它:

class Foo {
  constructor() {
    this.a = 'bar';
    return new Proxy(this, {
      get() {
        return 'proxy-bar'
      },
      set() {
        // Don't do anything
        return true
      }
    });
  }
}


const foo = new Foo();
foo.a = 'proxy-proxy-bar';
console.log(foo.a); // proxy-bar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多