基本特征
1.模塊化,可重用
2.封裝了變量和function,和全局的namaspace不接觸,松耦合
3.只暴露可用public的方法,其它私有方法全部隱藏
匿名閉包
(function () {
// ... 所有的變量和function都在這里聲明,并且作用域也只能在這個匿名閉包里
// ...但是這里的代碼依然可以訪問外部全局的對象
}());
引用全局變量
(function ($, YAHOO) {
// 這里,我們的代碼就可以使用全局的jQuery對象了,YAHOO也是一樣
} (jQuery, YAHOO));
基本的module模式
var blogModule = (function () {
var my = {}, privateName = "pray-lee";
function privateAddTopic(data) {
// 這里是內(nèi)部處理代碼
}
my.Name = privateName;
my.AddTopic = function (data) {
privateAddTopic(data);
};
return my;
} ());
module模式的拓展
Module模式的一個限制就是所有的代碼都要寫在一個文件,如果想增加拓展方法和屬性,可以把自己傳進(jìn)去
var blogModule = (function (my) {
my.AddPhoto = function () {
//添加內(nèi)部代碼
};
return my;
} (blogModule));
松耦合拓展
var blogModule = (function (my) {
// 添加一些功能
return my;
} (blogModule || {}));
緊耦合拓展 (可以進(jìn)行函數(shù)重載,把原先的賦值給一個新變量,進(jìn)而重寫自己)
var blogModule = (function (my) {
var oldAddPhotoMethod = my.AddPhoto;
my.AddPhoto = function () {
// 重載方法,依然可通過oldAddPhotoMethod調(diào)用舊的方法
};
return my;
} (blogModule));