javascript 我如何使用代理与传播运算符或对象,分配?

x8diyxa7  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(104)

我需要在回调函数中将方法和存储绑定到'this',但是当我使用spread操作符时,它不起作用。据我所知,这是因为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;
  }
);

字符串

0vvn1miw

0vvn1miw1#

删除未绑定的methods变量后,您的示例可以按预期工作。
您不会看到打印出来的消息,这是意料之中的,因为表达式{...store}实际上克隆了(代理)对象store,结果是创建了一个新的(常规)对象,并将其传递给bind,然后在那里进行修改。

相关问题