Код взят из статьи с сайта Хабрахабр. Там же можно посмотреть и подробное описание паттернов.
http://habrahabr.ru/sandbox/39442/
/*!
* паттерн простого плагина jQuery
* автор: @ajpiano
* дополнения: @addyosmani
* лицензия MIT
*/
// предваряющие точка с запятой предотвращают ошибки соединений
// с предыдущими скриптами, которые, возможно
// не были верно «закрыты».
;(function ( $, window, document, undefined ) {
// т.к. undefined, по определению ECMAScript 3, не является константой
// здесь мы явно задаем неопределенную переменную
// убеждаясь в ее действительной неопределенности
// В стандарте ES5, undefined уже точно константа
// window и document передаются локально, вместо глобальных
// переменных, что немного ускоряет процесс определения
// и позволяет более эффективно минифицировать
// ваш код, если эти переменные часто используются
// в вашем плагине
// определяем необходимые параметры по умолчанию
var pluginName = 'defaultPluginName',
defaults = {
propertyName: "value"
};
// конструктор плагина
function Plugin( element, options ) {
this.element = element;
// в jQuery есть метод extend, который
// объединяет несколько объектов в один,
// сохраняя результат в первый объект.
// зачастую первый объект является пустым,
// предотвращая затирание дифолтных значений
this.options = $.extend( {}, defaults, options) ;
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype.init = function () {
// Тут пишем код самого плагина
// Здесь у нас уже есть доступ к DOM, и входным параметрам
// через объект, типа this.element и this.options
};
// Простой декоратор конструктора,
// предотвращающий дублирование плагинов
$.fn[pluginName] = function ( options ) {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName,
new Plugin( this, options ));
}
});
}
})( jQuery, window, document );