我想将一个对象中的两个元素设置为一个字符串。我可以在两条单独的行上完成,就像这样。
var strings =
{
"1": "string 1",
"01": "string 1"
}
但我宁愿它在一条线上,就像这样。
var strings =
{
"1", "01": "string 1"
}
那显然行不通。有没有办法编写它以便两个元素都等于那个字符串?
但我宁愿它在一条线上,就像这样。
JavaScript 不关心换行符。您可以将所有内容写在一行中:
var strings = { "1": "string 1", "01": "string 1"};
更严肃地说,如果您只是想避免重复值(例如,在重构时避免拼写错误),那么最简单的解决方案是将值单独存储在变量中:
const value = "string 1";
var strings =
{
"1": value,
"01": value,
};
如果这是您不喜欢复制的分配,您可以使用分配返回分配值的事实:
var strings = {};
strings['1'] = strings['01'] = "string 1";
如果这些都以简单和干净的方式表达意图。不要试图太聪明,保持简单。
然而,从评论看来,您似乎希望两个属性的值“同步”。这对于“正常”属性分配是不可能的。这样做strings[1] = "new value";
会不会改变的价值strings['01']
。
为此,您需要使用getter和setter(或者您可以使用代理)。
var strings = (function() {
var value = "string 1";
var obj = {};
['1', '01'].forEach(prop => Object.defineProperty(obj, prop, {
get: () => value,
set: v => value = v,
enumerable: true,
}));
return obj;
}());
console.log(strings['1'], strings['01']);
strings['1'] = 'foo';
console.log(strings['1'], strings['01']);
strings['01'] = 'bar';
console.log(strings['1'], strings['01']);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句