我正在编写一个javascript对象,以防止重复同一个对象的别名
例如,在此处重复相同值的键:
var colours = {
red: {
rgb: "255,0,0",
hex: "#FF0000"
},
brickred: {
rgb: "255,0,0",
hex: "#FF0000"
}
};
我尝试对同一个对象进行引用,而不是重复:
var colours = {
red: {
rgb: "255,0,0",
hex: "#FF0000"
},
brickred: this.red
};
然而,这不起作用。我意识到(我认为)这是因为它指的是窗口对象而不是颜色。所以我试过了:
var colours = {
red: {
rgb: "255,0,0",
hex: "#FF0000"
},
brickred: colours.red
};
但这仍然不起作用,我不明白为什么。我该如何解决这个问题?
N.B。这个例子不是很好,但基本上我有一个对象文字,并希望避免重复,我有不同的键具有相同的值。我也想知道为什么它不能用于好奇
答案 0 :(得分:5)
因为在创建时,对象(包括其red
键)尚不存在。您可以在之后添加它:
var colours = {
red: {
rgb: "255,0,0",
hex: "#FF0000"
}
};
colours.brickred = colours.red;
答案 1 :(得分:1)
我认为对于您而言,将对象封装在单独的变量中然后将其应用于对象可能更简单,如下所示:
var _RED = {
rgb:"255,0,0",
hex:"#ff0000"
}
var colours = {
red: _RED,
brickred: _RED
}
此外,由于某些原因,不是您想要的,但您可以将brickred
更改为某个功能,然后您可以按照最初尝试的方式使用this
:
var colours = {
red: {
rgb: "255,0,0",
hex: "#FF0000"
},
brickred: function() { return this.red; }
};
在这种情况下,您永远不能更改brickred
的值,它必须像函数一样被调用,而不是像属性一样被访问,即colours.brickred()
。它将始终返回设置为red
的任何内容。