6.1 模块模式
模块模式需要两个必备条件
- 必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例).
- 封闭函数必须至少返回一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态.
function thisIsModule(){
let msg="this is fun";
function fun1(){
console.log(msg+"1");
}
function fun2(){
console.log(msg+"2");
}
return {
fun1:fun1,
fun2:fun2
};
}
let test=thisIsModule();
test.fun1();//this is fun1
test.fun2();//this is fun2
console.log(thisIsModule.msg);
模块的另一个用法
模块的另一个简单而又强大的用法是命名(name)将要作为公共API的返回对象
通过在模块实例的内部保留对公共API对象的内部引用,可以从内部模块对模块实例进行修改,包括添加删除方法和属性,以及修改他们的值
function thisIsModule(name){
let publicAPI={
change:change,
show:show
}
function change(){
//修改公共API
name=name.toUpperCase();
}
function show(){
console.log(name);
}
return publicAPI;
}
let test=thisIsModule("test");
test.show();//test
test.change();
test.show();//TEST