提问人:EMILO 提问时间:11/3/2023 最后编辑:user3840170EMILO 更新时间:11/15/2023 访问量:60
如何将代理与点差运算符或 object.assign 一起使用?
How can I use proxy with spread operator or object.assign?
问:
我需要在我的回调函数中将方法和存储绑定到“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;
}
);
答:
0赞
Andreas Rossberg
11/15/2023
#1
删除未绑定变量后,您的示例将按预期工作。methods
您不会看到正在打印的消息。这是意料之中的,因为表达式本质上是克隆 (代理) 对象 ,其效果是创建一个新的(常规)对象并将其传递到那里并在那里进行修改。{...store}
store
bind
评论