简体   繁体   English

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

[英]Javascript Object Literal referring to another property in itself from another property

I have a object literal: 我有一个对象字面值:

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

I am having trouble with the b property, for some reason it is not letting that happen. 我遇到了b属性的问题,出于某种原因它不会让这种情况发生。 Is this possible? 这可能吗?

You need two steps: 你需要两个步骤:

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

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

Or: 要么:

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

When the property b is being defined, obj is not defined yet. 在定义属性b ,尚未定义obj One way to get around that problem is to make your property a function so that it's not evaluated until called. 解决该问题的一种方法是使您的属性成为一个函数,以便在调用之前不对其进行求值。

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();

If you really want it to be a property, you have to do it in two steps as Tomasz Nurkiewicz shows 如果你真的希望它成为一个属性,你必须分两步完成,如Tomasz Nurkiewicz所示

The modern way to do this is with getter methods: 现代的方法是使用getter方法:

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

So now you can just write obj.fullName - no need for the parentheses on the end. 所以现在你可以写obj.fullName - 最后不需要括号。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM