Я пытаюсь использовать foo и bar внутри создаваемого config файла, но получаю ошибку:
ReferenceError: foo is not defined
Пример кода:
module.exports = {
foo: 'foo',
bar: 'bar',
array: [foo, bar]
}
Я пытаюсь использовать foo и bar внутри создаваемого config файла, но получаю ошибку:
ReferenceError: foo is not defined
Пример кода:
module.exports = {
foo: 'foo',
bar: 'bar',
array: [foo, bar]
}
module.exports = {
foo: 'foo',
bar: 'bar',
array: function() { return [this.foo, this.bar]; }
}
Использовать свойства объекта при его создании не получится.
Т.к. у вас там не JSON, а полноценный js код, можете использовать обычные переменные:
let foo = 'foo';
let bar = 'bar';
module.exports = {
foo, // эквивалентно записи foo:foo
bar,
array: [foo, bar]
};
Однако, при таком подходе значения всё ещё никак не связаны друг с другом - их можно менять независимо...
Можно использовать Proxy, чтобы реализовать подобное динамическое свойство.
let foo = 'foo';
let bar = 'bar';
const cfg = {foo, bar};
let config = new Proxy(cfg, {
get(target, prop) {
if (prop === 'array') return Object.values(target);
return target[prop];
},
set(target, prop, value) {
if (prop === 'array') throw new Error('array is read-only');
target[prop] = value;
return true;
}
});
// module exports = config;
console.log(config.foo, config.array);
config.foo = 'updated foo';
console.log(config.foo, config.array);
TypeError: Cannot read property 'foo' of undefinedпри попытке получить данные. – Максим Арнокай Aug 04 '18 at 22:57array? Можно дописать.bind(exports)к функции(если сделать какую-никакую ссылку заранее).. – vp_arth Aug 05 '18 at 08:10