Javascript Object Literal从另一个属性引用另一个属性

时间:2012-02-16 19:23:55

标签: javascript object

我有一个对象文字:

var obj = {
    a : document.getElementById("ex1"),
    b : obj.a.document.getElementsByTagName("div")
};

我遇到了b属性的问题,出于某种原因它不会让这种情况发生。这可能吗?

3 个答案:

答案 0 :(得分:2)

您需要两个步骤:

var obj = {
    a : document.getElementById("ex1")
};

obj.b = obj.a.document.getElementsByTagName("div")

或者:

var temp = document.getElementById("ex1")
var obj = {
    a : temp,
    b : temp.document.getElementsByTagName("div")
};

答案 1 :(得分:2)

在定义属性b时,尚未定义obj。解决该问题的一种方法是使您的属性成为一个函数,以便在调用之前不对其进行求值。

var obj = {
    a : document.getElementById("ex1"),
    b : function() {
      // This is not evaluated until obj.b() is called
      return obj.a.document.getElementsByTagName("div");
    }
};
obj.b();

如果你真的希望它成为一个属性,你必须分两步完成Tomasz Nurkiewicz显示

答案 2 :(得分:0)

现代的方法是使用getter方法:

let obj = {
  firstName: "A’dab",
  lastName: "Farooqi"
  get fullName() {
    return this.firstName+" "+this.lastName;
  },
}

因此,您现在可以只写obj.fullName-不需要最后加上括号。