javascript - 将 JavaScript 代理对象重置为默认值
问题描述
我正在尝试管理必须用纯 JS 编写的小型应用程序的状态。我认为代理对象是合适的,因为当某些属性更新时,我需要更新页面上的各种元素。
假设我有这个代码:
所有示例的共享设置
const defaults = {
foo: 'bar'
};
const state = { ...defaults };
代码主体
const proxy = new Proxy(state, {
});
proxy.foo = 'baz'
我们有一个没有做任何事情的裸代理。但我想实现一个函数或陷阱,可以将代理对象的所有值重置回原始默认值。
我想象能够调用类似的东西proxy.reset()
。
我已经尝试过这样的事情,但它似乎并没有更新对象:
const proxy = new Proxy(state, {
get(target, prop) {
if(prop == 'reset') {
target = { ...defaults }
}
}
});
proxy.foo = 'baz'
proxy.reset
有任何想法吗?我需要在开始时使用其他类型的对象吗?我试图避免简单地手动设置值,因为默认对象可能会随着我的开发而改变。感觉应该有一种优雅的方式来做到这一点。
解决方案
会告诉您正在丢失“指针”设置目标 - 您可以设置属性,但不能通过此更改对象。
const defaults = {
foo: 'bar'
};
const state = { ...defaults };
const proxy = new Proxy(state, {
get (target, prop) {
if (prop === 'reset') {
Object.assign(target, defaults);
/*for (var i in defaults) {
target[i] = defaults[i];
}*/
}
if (prop === 'get') {
return target;
}
}
});
proxy.foo = 'baz';
console.log(proxy.get);
proxy.reset;
console.log(proxy.get);
推荐阅读
- java - Java:如何同时放置 Paintcomponet 和其他组件?
- java - 在 Java 流中的终端操作之后使用中间操作
- c - char * 的范围与 C 中的 char 数组比较
- javascript - 如何通过打印推断的变量类型来调试 TypeScript?
- javascript - 如何将 JSP 文件中导入的 Java 常量访问到 Javascript 函数中
- python - 通过多个 FK 属性进行查询集过滤
- sql-server - 是否可以升级 GCP Cloud Sql Server Express 实例的版本?
- javascript - 是否可以编写一个函数来使用 Angular 9 过滤嵌套数组?
- python - 缩放时 PIL 图像到 Pygame 图像错误
- java - 以最少的代码更改在数据库之间切换的设计模式