首页 > 解决方案 > 将 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

有任何想法吗?我需要在开始时使用其他类型的对象吗?我试图避免简单地手动设置值,因为默认对象可能会随着我的开发而改变。感觉应该有一种优雅的方式来做到这一点。

标签: javascript

解决方案


会告诉您正在丢失“指针”设置目标 - 您可以设置属性,但不能通过此更改对象。

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);


推荐阅读