Возник вопрос о правильном подходе создания плагина на js.
Пример работы на Plunker, а так же код на github.
Суть работы плагина:
Проблема: когда используется два и более раз, то плагин ломается и отображет только последнюю галерею.
(function() {
let gallery_1 = new SkySlider('.first-gallery');
let gallery_2 = new SkySlider('#second-gallery', {
showThumbnails: true,
thumbnailsItemCount: 6,
});
})();
Вместо хранения this
в замыкании, как это сделано у вас
(function() {
// for `this`
let _;
function SkySlider(selector = null, options = null) {
_ = this;
}
// остальные функции использующие _ в качестве this
})()
Можно все вспомогательные функции поместить в прототип функции SkySlider
(function() {
function SkySlider(selector = null, options = null) {}
SkySlider.prototype.init = function () {}
SkySlider.prototype.otherMethod = function () {}
// либо по другому делаем функцию доступной из вне
window.SkySlider = SkySlider
})()
В таких методах this
будет ссылать на текущий экземпляр класса и не перезаписывать какую-то глобальную переменную
Как вынести данные из объекта в отдельные переменные, чтобы при использовании каждый раз не писать objectname, object