Javascript Object Literal ссылается на другое свойство само по себе из другого свойства - PullRequest
4 голосов
/ 16 февраля 2012

У меня есть литерал объекта:

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

У меня проблемы со свойством b, по какой-то причине оно не позволяет этому случиться. Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Когда свойство 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();

Если вы действительно хотите, чтобы оно было свойством, вы должны сделать это в два шага: Томаш Нуркевич показывает

2 голосов
/ 16 февраля 2012

Вам нужно два шага:

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 голос
/ 16 сентября 2018

Современный способ сделать это с помощью getter методов:

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

Так что теперь вы можете просто написать obj.fullName - без скобок в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...