我需要在回调函数中将方法和存储绑定到'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;
}
);
字符串
1条答案
按热度按时间0vvn1miw1#
删除未绑定的
methods
变量后,您的示例可以按预期工作。您不会看到打印出来的消息,这是意料之中的,因为表达式
{...store}
实际上克隆了(代理)对象store
,结果是创建了一个新的(常规)对象,并将其传递给bind
,然后在那里进行修改。