Javascript对象文字从另一个属性引用另一个属性本身

Javascript对象文字从另一个属性引用另一个属性本身,javascript,object,Javascript,Object,我有一个对象文字: var obj = { a : document.getElementById("ex1"), b : obj.a.document.getElementsByTagName("div") }; 我有麻烦与b财产,出于某种原因,它不让这种情况发生。这可能吗?您需要两个步骤: var obj = { a : document.getElementById("ex1") }; obj.b = obj.a.document.getElementsByTa

我有一个对象文字:

var obj = {
    a : document.getElementById("ex1"),
    b : obj.a.document.getElementsByTagName("div")
};
我有麻烦与b财产,出于某种原因,它不让这种情况发生。这可能吗?

您需要两个步骤:

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

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


定义属性
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();

如果您真的希望它成为一个属性,则必须分两步进行,如图所示。现代的方法是使用以下方法:


因此,现在您可以只编写
obj.fullName
——不需要在末尾加括号。

您可以在支持它的浏览器中使用a
var obj={a:document.getElementById(“ex1”),get b(){return this.a.document.getElementsByTagName(“div”)}
@Pumbaa80由支持它的浏览器命名,你是说仅限Firefox???更好的方法是使用
Object.defineProperty
,因为它在所有浏览器的最新版本中都可用,但这也需要多个步骤。实际上,考虑到JavaScript的最新更新,所有浏览器(可能重复的除外)都应该被接受为正确答案。而且,这是一个强大的特性,应该在开发人员中传播。
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();
let obj = {
  firstName: "A’dab",
  lastName: "Farooqi"
  get fullName() {
    return this.firstName+" "+this.lastName;
  },
}