Когда вы работаете с объектом jQuery options, следует ли мне ссылаться на «глобальный» RespiveMenu каждый раз или создавать «локальную» копию параметра, который мне нужен в каждом модуле?jQuery options object reference
Посмотрите на код и сообщите мне, что вы считаете лучшим, и почему, или если это вообще имеет значение. То, как я это делаю: если я использую ссылку более одного раза, я делаю «локальную» копию. Если я использую его только один раз, я буду ссылаться на «глобальный».
ResponsiveMenu = {
init: function(options, elem) {
this.options = $.extend({}, this.options, options);
this.elem = $(elem);
this.bindEvents();
return this;
},
options: {
trigger: null,
activeClass: 'active',
submenuTrigger: $('.sub-toggle')
},
bindEvents: function() {
var self = this;
this.options.trigger.on('click', triggerMain(evt, self));
},
triggerMain: function(evt, self) {
evt.preventDefault();
var activeClass = self.options.activeClass;
self.elem.toggleClass(activeClass);
self.options.trigger.toggleClass(activeClass); //"Global" reference
},
}
ИЛИ это:
bindEvents: function() {
var self = this,
trigger = this.options.trigger; //"Local" copy
trigger.on('click', triggerMain(evt, self, trigger));
},
triggerMain: function(evt, self, trigger) {
evt.preventDefault();
var activeClass = self.options.activeClass;
self.elem.toggleClass(activeClass);
trigger.toggleClass(activeClass);
},
Ваша стратегия ("* если используется несколько раз, разыменование локальной переменной *") в порядке. Тем не менее, единственная разница между вашими двумя кодами кажется дополнительным параметром 'triggerMain' и не имеет большого отношения к вашему вопросу? – Bergi
Для меня это похоже на то, что для небольшого количества ссылок на глобальную переменную это совершенно одно и то же. В любом случае вы не увидите каких-либо изменений производительности (или потерь памяти) путем отсрочки на локальные переменные, если количество раз, когда вы используете глобальную переменную, невелико (как в приведенном примере). – whatyouhide
Также обратите внимание, что метод 'on' ожидает простой функции для аргумента обработчика, вы уже вызываете его (и передаете результат вызова). – Bergi