模块·封装数据

有时候我们不希望外部访问私有变量,但希望外部可以来访问方法,我们通过模块模式来暴露相关的接口供外部调用,同时函数内部的私有变量外部又是访问不到的,从而实现了数据的封装,达到信息隐藏的目的。
接下来我们来看demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var prison = (function(){
var prisonerName = "Mike";
var jailTerm = "20 year term";
return {
prisoner : function(){
return prisonerName + "-" + jailTerm;
},
setJailTerm : function(term){
jailTerm = term;
}
};
})();
console.log(prison.prisoner()); //"Mike-20 year term"
prison.setJailTerm("Sententce commuted");
console.log(prison.prisoner()); //"Mike-Sententce commuted"

通过立即执行函数可以避免全局污染。
我们不能通过prison. prisonerName和prison. jailTerm来访问prison的变量(私有变量),因为私有变量的生命周期只存在立即执行函数的作用域内,但是我们可以通过访问prison.prisoner()和prison.setJailTerm()这两个对象方法(函数暴露的接口)来访问和修改变量值。