Я использую прокси для управления созданием объекта без необходимости объявлять весь «родительский ключ» объекта.
var target = {};
var config = Proxy_ObjectCreator(target, handlers);
config.foo.bar = "Didn't need to create foo !";
return target;
Вместо этого
var config = {
foo : {
bar : "needed to create foo ..."
}
};
return config;
Эточасть хороша и функциональна, но проблема в том, что часто случается так, что я забываю, что мне нужно вернуть целевой объект вместо прокси-сервера, что часто создает действительно странное поведение в моем коде.
Насколько я знаю, у объекта Proxy нет способа обработать оператор return.И поэтому я пытаюсь найти способ сделать именно это.Что-то в этом роде:
var config = Proxy_ObjectCreator({}, {
get: (obj, prop, receiver) => {
//Do stuff ...
},
set: (obj, prop, receiver) => {
//Do stuff ...
},
return: () => {
return this.target;
}
});
config.foo.bar = "Didn't need to create a target obj and don't need to return it !";
return config;
Есть ли способ достичь этого?
Спасибо.
Редактировать
I 'я использую это для переопределения конфигураций от большего продукта к спецификациям клиента.Так что я работаю с сотнями строк конфигураций.Использование прокси-сервера позволяет мне структурировать файл конфигурации для дальнейшего и более четкого чтения.Это также позволяет мне группировать конфигурации, которые могут быть по всему исходному файлу конфигурации, чтобы прокомментировать причину, по которой они были изменены, без необходимости прокручивать вверх и вниз объект.
//Normal Object Case
function getClientConfigs() = {
return {
config1: {
foo: {
bar: {
foofoo: {
barbar: "value to override"
}
}
}
},
// hundreds of other configs
config2:{
foo: "other value to override"
}
};
}
//With proxy
function getClientConfigs() = {
var config = {};
var proxy = Proxy_ObjectCreator(config, handlers);
// Changing because client wanted that for x reason
proxy.config1.foo.bar.foofoo.barbar = "value to override";
proxy.config2.foo = "other value to override";
return config;
}
$.extend(originalConfig, getClientConfigs());