Получить экземпляр / ссылку из функции прототипа jQuery ($.fn)
Я написал плагин jQuery, который использует прототип.
Пример:
function MyWidgetConstructor(element) {
this.id = 'test';
this.$element = $(element);
this.$element.data('instance', this);
}
MyWidgetConstructor.prototype.sayHello = function() {
alert('Hello, my ID is: ' + this.id);
}
$.fn.myWidget= function() {
return this.each(function() {
new MyWidgetConstructor(this);
});
};
Я использую атрибут data для сохранения ссылки на виджет. Таким образом, я могу вызвать методы-прототипы с переменными экземпляра следующим образом:
jQuery('#myInstance').myWidget();
jQuery('#myInstance').data('instance').test();
Однако, это не всегда работает. Есть ли другой способ добраться до ссылки (возможно, без использования атрибута данных)?
1 ответ:
Я нашел другой подход! Для управления различными экземплярами можно использовать глобальный массив экземпляров.
Пример:
(function ($) { window.InstanceCollection = window.InstanceCollection || {}; $.fn.myWidget = function () { return this.each(function () { new MyWidgetConstructor(this); }); }; function MyWidgetConstructor(element) { this.id = 'test'; window.InstanceCollection[this.id] = this; } MyWidgetConstructor.prototype.sayHello = function () { alert('Hello, my ID is: ' + this.id); } })(jQuery) jQuery(function ($) { $('#myInstance').myWidget(); window.InstanceCollection['test'].sayHello(); })