Я написал около 5-ти плагинов и вывел для себе такой шаблон. Если есть не понятные моменты, спрашивай, прокомментирую.
(function($, window, undefined) {
'use strict';
var plugin = {
name: 'plugin',
data: {
setting: 'setting'
}
}, defaults = {
color: 'red',
background: 'black'
};
var methods = {
init: function($this, setting, type) {
var setting = function() {
var params = $.extend({}, defaults, setting);
$this.data(plugin.data.setting, params);
return params;
}();
/* START */
$this.css({
color: setting.color,
background: setting.background
});
/* END */
},
set: function(key, value) {
var setting = $(this).data(plugin.data.setting);
switch (typeof key) {
case 'string':
setting[key] = value;
break;
case 'object':
setting = $.extend(true, {}, setting, key);
break;
}
methods.init($(this), setting, 'update');
},
get: function(key) {
var setting = $(this).data(plugin.data.setting);
if (key) {
return Object.getOwnPropertyDescriptor(setting, key).value;
} else {
return setting;
}
},
destroy: function() {
$(this).removeData(plugin.data.setting).fadeOut(200, function() {
$(this).empty().show();
});
}
};
$.fn[plugin.name] = function(setting, key, value) {
if (typeof setting === 'object' || !setting) {
return $.each(this, function() {
methods.init($(this), setting, 'init');
});
} else if (typeof setting === 'string') {
switch(setting.toLowerCase()) {
case 'set':
return methods.set.call(this, key, value);
case 'get':
return methods.get.call(this, key);
case 'destroy':
return methods.destroy.call(this);
}
}
};
})(jQuery, window);
Использование:
// Инициализация с параметрами по умолчанию
$('.block').plugin();
// или своими параметрами
$('.block').plugin({
color: 'green',
background: 'white'
});
// Метод SET, изменить параметры и переинциализировать плагин
$('.block').plugin('set', 'color', 'red');
// или передать объект новых параметров
$('.block').plugin('set', {
color: 'yellow',
background: 'black'
});
// Метод GET, получить параметры плагина
$('.block').plugin('get', 'color');
// или получить все параметры
$('.block').plugin('get');
// Метод DESTROY, отвязать плагин
$('.block').destory();