在对象内引用对象

时间:2014-02-19 19:46:58

标签: javascript oop object-literal

我正在编写一个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。这个例子不是很好,但基本上我有一个对象文字,并希望避免重复,我有不同的键具有相同的值。我也想知道为什么它不能用于好奇

2 个答案:

答案 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的任何内容。