如何将代理与点差运算符或 object.assign 一起使用?

How can I use proxy with spread operator or object.assign?

提问人:EMILO 提问时间:11/3/2023 最后编辑:user3840170EMILO 更新时间:11/15/2023 访问量:60

问:

我需要在我的回调函数中将方法和存储绑定到“this”,但是当我使用扩展运算符时,它不起作用。 据我所知,这样做的原因是 spread 运算符返回原始副本。因此,代理永远不会被触发。

在这种情况下,我该怎么做才能触发代理?

const setup = function (options, cb) {
  let store = new Proxy(options.store, {
    set(target, prop, value) {
      console.log(`changed ${prop} from ${target[prop]} to ${value}`);
      target[prop] = value;
      return true;
    },
  });
  cb.bind(store)(); // Works as expected
  // cb.bind({ ...store, ...methods })(); // Doesn't work
};

setup(
  {
    store: {
      n: 123,
    },
  },
  function () {
    this.n = 456;
  }
);
JavaScript 节点.js 绑定 ES6-代理

评论

1赞 David 11/3/2023
请参阅我的网站或项目中的某些内容不起作用。我可以只粘贴一个链接吗?问题中需要包含相关代码,以生成一个最小的可重现示例来演示问题,以及有关问题本身和您所做的调试的信息。要了解有关此社区的更多信息以及我们如何为您提供帮助,请从导览开始并阅读如何提问及其链接资源。

答:

0赞 Andreas Rossberg 11/15/2023 #1

删除未绑定变量后,您的示例将按预期工作。methods

您不会看到正在打印的消息。这是意料之中的,因为表达式本质上是克隆 (代理) 对象 ,其效果是创建一个新的(常规)对象并将其传递到那里并在那里进行修改。{...store}storebind