как дом кэшируется между функциями в литерале объекта? (Javascript) - PullRequest
0 голосов
/ 10 октября 2010

Хорошо, я не уверен, что заголовок этого поста является правильным способом обозначить то, что я имею в виду, и я почти уверен, что уже знаю ответ на этот вопрос, но я просто хотел получить некоторые разъяснения.* Если у меня есть oject, подобный этому

var myObj = {
  settings : {
    domObj = document.getElementById('elem1');
  },
  myFunc1 : function () {
    return this.domObj;
  },
  myFunc2 : function () {
    return this.domObj;
  }
}

myObj.myFunc1();
myObj.myFunc2();

Кэшируется ли domObj при первом обращении к нему, или dom просматривается в обеих функциях?Я пытаюсь получить доступ к Dom только один раз, но не уверен, возможно ли это.

Ответы [ 2 ]

1 голос
/ 10 октября 2010

Предполагается, что вы делаете "this.domObj =" и другие исправления, которые вы отметили;да;элемент DOM кэшируется в this.domObj.Единственный раз, когда DOM фактически просматривается, это когда вы вызываете методы обхода DOM.Присвоение элемента DOM свойству переменной / объекта работает точно так же, как и любое другое назначение.

1 голос
/ 10 октября 2010

Предполагая, что вы действительно имели в виду это:

var myObj = {
  settings : function() {
    domObj = document.getElementById('elem1');
  },
  myFunc1 : function() {
    return this.domObj;
  },
  myFunc2 : function() {
    return this.domObj;
  }
};

ответ таков: "domObj" является глобальной переменной , потому что вы забыли ключевое слово var. Теперь вы, возможно, имели в видуthis:

var myObj = {
  domObj: null,
  settings : function() {
    this.domObj = document.getElementById('elem1');
  },
  myFunc1 : function() {
    return this.domObj;
  },
  myFunc2 : function() {
    return this.domObj;
  }
};

, в этом случае «domObj» является просто свойством «myObj».Это будет установлено, если вы позвоните

myObj.settings();
...