В настоящее время я создаю свой плагины JQuery, используя этот «шаблон»:Abstractize JQuery создание плагина
;(function($, window, document){
var defaultOptions = {
option1: value1,
option2: value2,
};
function plugin(el, options){
this.options = $.extend({}, defaultOptions, options);
this.el = el;
this.__construct();
};
plugin.prototype = {
__construct: function(){
// do the plugin stuff, set up events etc.
},
__destruct: function(){
$(this.el).removeData('myPlugin');
},
// other plugin functions here...
};
$.fn.myPlugin = function(options){
var additionalArguments = Array.prototype.slice.call(arguments, 1);
return this.each(function(){
var inst = $.data(this, 'myPlugin');
if(!(inst instanceof plugin)){
var inst = new plugin(this, options);
$.data(this, 'myPlugin', inst);
return inst;
}
if(typeof options == 'string'){
inst[options].apply(inst, additionalArguments);
}
});
};
$(document).ready(function(){
$('.my-plugin').myPlugin();
});
})(jQuery, window, document);
я получил большинство идей от https://github.com/jquery-boilerplate/jquery-boilerplate/blob/master/src/jquery.boilerplate.js
Так что этот пример не делает ничего на самом деле, это просто «позвоночник» плагина, и, как вы можете видеть, это довольно немного кода ....
Могу ли я построить какую-то функцию создателя плагина, которая позволила бы мне переписать код выше на нечто меньшее:
createPlugin('myPlugin', {
defaultOptions: {},
__construct: function() {
...
},
__destruct: function() {
...
},
somePublicFunction: function(){
...
}
});
Но все-таки быть в состоянии использовать его как
$('.element').myPlugin();
?
В PHP я хотел бы использовать абстрактные классы для такого рода вещей, но я не знаю, как это сделать в JavaScript ...
действительно хотите вернуть 'this' not' $ (this) ' – charlietfl