接下来,我们再来看两个关于闭包的应用示例。首先是创建 getter 和 setter 。假设现在有一个变量,它所表示的是某类特定值,或某特定区间内的值。我们不想将该变量暴露给外部。因为那样的话,其他部门的代码就有直接修改它的可能。
所以,我们需要将它保护在相关函数的内部,然后提供两个额外的函数----一个用于获取变量,另一个用于给变量重新赋值。并在函数中引入某种验证措施,以便在赋值之前给予变量一定的保护。另外,为简洁起见,我们对该类中的验证部门进行了简化:即这里只处理数字类型。
我们需要将 getter 和 setter 这两种函数放在一个共同函数中,并在该函数中定义 secret 变量,这使得两个函数能够共享同一作用域:
var getValue, setValue;
(function(){
var secret = 0;
getValue = function(){
return secret;
};
setValue = function(v){
if(typeof v === 'number'){
secret = v;
}
}
}());
//调用一下
getValue(); //0
setValue(10);
getValue(); //10在这里,所有一切都是一个 即时函数 来实现的,我们在其中定义了全局函数 setValue( ) 和 getValue( ),并以此来确保局部变量 secret 的不可直接访问性。
本文摘自《JavaScript面向对象编程指南》,分享的目的仅供个人学习和理解,如需转载请备注本文出处,谢谢!