基本特征
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) {
// 这里是内部处理代码
}
my.Name = privateName;
my.AddTopic = function (data) {
privateAddTopic(data);
};
return my;
} ());
module模式的拓展
Module模式的一个限制就是所有的代码都要写在一个文件,如果想增加拓展方法和属性,可以把自己传进去
var blogModule = (function (my) {
my.AddPhoto = function () {
//添加内部代码
};
return my;
} (blogModule));
松耦合拓展
var blogModule = (function (my) {
// 添加一些功能
return my;
} (blogModule || {}));
紧耦合拓展 (可以进行函数重载,把原先的赋值给一个新变量,进而重写自己)
var blogModule = (function (my) {
var oldAddPhotoMethod = my.AddPhoto;
my.AddPhoto = function () {
// 重载方法,依然可通过oldAddPhotoMethod调用旧的方法
};
return my;
} (blogModule));
网友评论