1.最简单的,使用变量,然后用匿名函数包裹,不封装
2.对象字面量简单封装(不完整的模块模式,因为无法达到变量、方法私有效果。不过确实有分离和组织代码的能力,也就算一种简略的模块模式的实现方式)
var Carousel = {
init: function(){...},
bind: function(){...},
showPre: function(){...},
showNext: function(){...}
};
3.原型构造器模式封装
function Carousel(){
this.init();
}
Carousel.prototype = {
init: function(){...},
bind: function(){...},
showPre: function(){...},
showNext: function(){...}
};
4.模块模式与原型构造器模式绑定多个:使用一个数组保存实例
var CarouselCenter = (function () {
var carouselList = [];
function init($carousel) {
$carousel.each(function () {
var $cal = $(this);
if ($cal.hasClass('init')) {
return;
}
carouselList.push(new Carousel($cal));
$cal.addClass('init');
});
}
function getList() {
return carouselList;
}
function Carousel($carousel) {}
Carousel.prototype = {
bind: function () {
var _this = this;
this.$pre.on('click', function () {
_this.showPre();
});
this.$next.on('click', function () {
_this.showNext();
});
},
showPre: function () {
this.$ct.prepend(this.$ct.children().last());
this.$ct.css('left', 0 - this.imgWidth);
this.$ct.animate({ left: 0 });
},
showNext: function () {
var $ct = this.$ct;
$ct.animate({ left: 0 - this.imgWidth }, function () {
$ct.append($ct.children().first());
$ct.css('left', 0);
});
},
};
return {
init: init,
getList: getList,
};
})();
// 调用
// CarouselCenter.init($('#c1'))
// CarouselCenter.init($('#c2'))
// CarouselCenter.init($('#c2')) //不会重复绑定
// CarouselCenter.init($('.carousel'))
5.通用写法
(function (window, $) {
function Carousel() {}
Carousel.prototype = {};
window.Carousel = Carousel;
})(window, jQuery);
ps:
模式目的:编写易于维护的代码,其中一个最重要方面是能够找到代码中重复出现的主题并优化它们。