Skip to content

Instantly share code, notes, and snippets.

@wtw24
Last active January 17, 2020 07:06
Show Gist options
  • Save wtw24/446203b85f89a16641de62fbcc09e3ef to your computer and use it in GitHub Desktop.
Save wtw24/446203b85f89a16641de62fbcc09e3ef to your computer and use it in GitHub Desktop.
шаблон прототипирования плагинов jQuery
// myObject – объект реализуемой модели (например, машина)
var myObject = {
init: function( options, elem ) {
// объединяем входные параметры с дифолтными
this.options = $.extend( {}, this.options, options );
// Сохраняем указатели на элементы
this.elem = elem;
this.$elem = $(elem);
// реализуем базовую структуру DOM
this._build();
// возвращаем this для более простого обращения к объекту
return this;
},
options: {
name: "No name"
},
_build: function(){
//this.$elem.html('<h1>'+this.options.name+'</h1>');
},
myMethod: function( msg ){
// тут у нас есть прямой доступ к сохраненным ранее указателям
// this.$elem.append('<p>'+msg+'</p>');
}
};
// проверим наличие метода Object.create
// создадим, если отсутствует
if ( typeof Object.create !== 'function' ) {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
// создание плагина на основе описанного объекта
$.plugin = function( name, object ) {
$.fn[name] = function( options ) {
return this.each(function() {
if ( ! $.data( this, name ) ) {
$.data( this, name, Object.create(object).init(
options, this ) );
}
});
};
};
// Пример использования:
// превращаем myObject в плагин
// $.plugin('myobj', myObject);
// и используем, как обычно
// $('#elem').myobj({name: "John"});
// var inst = $('#elem').data('myobj');
// inst.myMethod('I am a method');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment