getter与setter

166 阅读1分钟

接下来,我们再来看两个关于闭包的应用示例。首先是创建 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面向对象编程指南》,分享的目的仅供个人学习和理解,如需转载请备注本文出处,谢谢!