Я пишу плагин, который будет отображать маленький помощник при вызове.Он должен быть инициирован следующим образом:
$(el).santasLittleHelper([options])
Затем у плагина есть некоторые "события", такие же, как у пользовательского интерфейса jquery, и они должны запускаться так:
$(el).santasLittleHelper('evetnName', [options])
У меня естьпрототип работает, но у меня есть некоторые опасения по поводу будущих проблем с моей структурой.Переполнение памяти или другие проблемы с областями действия переменных и функций, когда я продолжаю работать над этим.Вот схема:
(function($) {
$.fn.santasLittleHelper = function(p1, p2) {
return this.each(function() {
var o = {
showSpeed: 50,
hideSpeed: 50,
duration: 5000,
delay: 0
}
var el = $(this);
function init() {
console.log('init 1');
}
var events = {
show: function(opt) {},
hide: function(opt) {},
pulse: function(opt) {}
}
if(p1 == undefined) {//This is obviously the init call
init();
}
if(typeof(p1) == 'object') {
//Correctly added parameters would then mean that p1 is options
//and is the only parameter added so we store the options and init
$.extend(o, p1);
init();
}
if(typeof(p1) == 'string') {
//This is a call to an "event".
//call the "event" function and supply possible options as arg
events[p1](p2);
}
});
}
})(jQuery);
Опции могут быть предоставлены для каждого вызова события, но в этом случае должны быть доступны только в этой области функции событий.Это потому, что я мог бы захотеть, чтобы помощник делал что-то из ментальных рамок, в которых я его создал, предоставляя опции в вызове init.
Будет ли этот подход немного заполнять память при каждом вызове $ (el) .santasLittleHelper ('событие') из-за объявленных переменных в начале кода?
Я думаю, что это выглядит чисто и понятно, но можно ли сделать улучшения?