Модульный подход - Как можно задавать или изменять переменные внутри модуля?

В модуле имеется переменная - хранящая кнопку выхода. В методе init я пытаюсь ее инициализировать, чтобы работать с ней в других методах данного модуля, а в дальнейшем дать возможность обращаться к ней, вернув её как поле объекта. Однако значение logoutBtn остаётся undefined даже после вызова метода init.

Каким образом можно задавать/изменять переменные внутри модуля и в чем некорректность моего подхода?

var myModule = (function () {    
var logoutBtn;    

var init = function () {             
    logoutBtn = document.getElementById("logoutButton");                
};   

...

return {
    init: init,
    ...    
    logoutButton: logoutBtn,
    ...
};
})();

Ответы (1 шт):

Автор решения: Stranger in the Q

Вероятно Вам хватит такой конструкции:

init: function(){
    this.logoutButton = ...;
}

но наверняка и внутри модуля надо будет обращаться к этому же полю, по этому, вероятно, надо сделать как то так:

var module = {
   init:...,
   logoutButton:...
}

return module;

Или уже так:

var myModule = (function () {    
  var logoutBtn;    

  var init = function () {             
    logoutBtn = document.getElementById("logoutButton");                
  }; 

  var module = {
    init: init
  };

  Object.defineProperty(module, "logoutButton", {
    get: function() {
      return logoutBtn;
    }
  });

  return module;
})();
→ Ссылка