模块化编程
1.定义
define(factory(){
// 模块代码
// return something;
});
2.自调用匿名函数(使用闭包)
;(function (参数) {
// 模块代码
// return something;
})(参数);
也称为立即调用的函数表达 (Immediately-Invoked Function Expression, IIFE–读做“iffy”)。
3.模块的本质
在闭包中,可以定义私有变量和函数,外部无法访问它们,从而做到了私有成员的隐藏和隔离。而通过返回对象或函数,或是将某对象作为参数传入,在函数体内对该对象进行操作,就可以公开我们所希望对外暴露的公开的方法与数据。
4.参数的输入
考虑模块的独立性和封装,对其它对象的引用应该通过参数来引入。
不好的方式:模块里直接引用这些对象的名字,没有将这些对象作为参数来显式的引用。很可能出错。
5.模块输出(Module Export)
通过匿名函数的 return 语句来达成。
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
》》1输出简单的对象--对象直接量
var Module1 = (function () {
var private_variable = 1;
function private_method() { /*...*/ }
var my = {
property1: 1,
property2: private_variable,
method1: private_method,
method2: function () {
// ...
}
};
return my;
}());
》》2输出函数
var Cat = (function () {
// 私有成员及代码 ...
return function(name) {
this.name = name;
this.bark = function() { /*...*/ }
};
}());
var tomcat = new Cat("Tom");
tomcat.bark();
6.####Revealing Module Pattern####
这种模式要求在私有范围内中定义变量和函数,然后返回一个匿名对象,在该对象中指定要公开的成员。
var MODULE = (function () {
// 私有变量及函数
var x = 1;
function f1() {}
function f2() {}
return {
public_method1: f1,
public_method2: f2
};
}());
7.