Это потому, что вы используете функцию немедленного выполнения (()
в конце вашего «модуля»), а в момент, когда ваша функция объявлена и выполнена, никакое значение не передается.
Вы можете указать вашей функции getAlerter
принять дополнительный параметр:
function getAlerter(trigger){
// your getter code...
}
но это ставит под сомнение всю идею вашего паттерна.
Если вы хотите вызвать ваш модуль с назначенным элементом, вам, скорее всего, должно получиться что-то вроде этого:
var tooltip = function(elem){
// your whole module code...
}('.trigger');
или, если вам нужно несколько экземпляров, удалите ()
в конце вашего «модуля» и запустите его так:
var myTooltip = tooltip('.alerter');
myTooltip.alerter();
если вы хотите сохранить его как один экземпляр, вы можете легко добавить init
метод:
var tooltip = function(elem){
var trigger;
function getAlerter(){
return alert(trigger);
};
function init(elem) {
trigger = elem;
}
return{
alerter: getAlerter,
init: init
}
}();
и запустите его так:
tooltip.init('.alerter');
tooltip.alerter();