首页 > 代码库 > JavaScript中闭包实现的私有属性的getter()和setter()方法

JavaScript中闭包实现的私有属性的getter()和setter()方法

注意:

以下的输出都在浏览器的控制台中

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>闭包</title>
</head>
<body>
<script type="text/javascript">
/**
 * 利用闭包实现
 * 这个函数给对象o增加了属性存储器方法
 * 方法名称为get<name>和set<name>。如果提供了一个判断函数
 * setter方法就会用它来检测参数的合法性,然后再存储它
 * 如果判定函数返回false,setter方法就会抛出一个异常
 *
 * 这个函数具有getter和setter函数
 * 所操作的属性值并没有存储在对象o中
 * 想反,这个值仅仅是保存在函数中的局部变量中
 * getter和setter方法同样是局部函数,因此可以访问这个局部变量
 * 也就是说,对两个存取器方法来设置或或修改这个值
 */
function addPrivateProperty(o,name,predicate) {
    var value;//这是一个属性值

    //getter方法简单地将其返回
    o[‘get‘+name] = function(){return value;};

    //setter方法首先检查值示范合法,若不合法就会抛出异常
    //否则就将其存储起来
    o[‘set‘+name] = function(v){
        if(predicate && !predicate(v))
            throw Error(‘set‘+name+": invalid value "+v);
        else
            value = v;
    };
}

//想的代码展示addPrivateProperty()方法
var o = {};//设置一个空对象

//增加属性存储器方法getName()和setName()
//确保只语序字符串值
addPrivateProperty(o,"Name",function(x){return typeof x==="string";});
o.setName("Frank");            //设置属性值
console.log(o.getName());    //获取属性值
try{
    o.setName(0);            //设置一个非字符值,会抛出一个错误 (由throw语句抛出)
}catch(e){
    console.log("属性值设置出错"); //上面抛出的错误在这里的到处理
}

</script>
</body>
</html>

 

JavaScript中闭包实现的私有属性的getter()和setter()方法