给大家推荐一个非常好用的JS函数addPrivatePropery()

作者:admin     字体:[增加 减小]    类型:原创
给大家推荐一个好用的函数,这个函数在JS编程中其实经常要用到。尤其是在写JS的构造函数时经常要用来。
/*
这个函数给对象o增加了属性存取器方法
方法名称为get`<name>`和set`<name>`。如果提供了一个判定函数
setter方法就会用它来检测参数的合法性,然后再存储它

这个函数有一个非同寻常之处,就是getter和setter函数
所操作的属性值并没有存储在对象o中
相反,这个值仅仅是保存在函数中的局部变量中
getter和setter方法同样是局部函数,因此可以访问这个局部变量
也就是说,对于两个存取器方法来说这个变量是私有的
没有办法绕过存取器方法来设置或修改这个值
*/
function addPrivateProperty(o,name,predicate){
    var value;
    o["get"+name] = function(){return value;};
    o["set"+name] = function(v){
        if ( predicate && !predicate(v)) {
            throw Error("set " + name + ": invalid value " + v);
        } else {
            value = v;
        }
    };
}

var o = {}; //设置一个空对象

//增加属性存取器方法getName()和setName()
//确保只允许字符串值
addPrivateProperty(o,"Name",function(x){return typeof x == "string"});

o.setName("Frank");     //设置属性值
console.log(o.getName());   //得到属性值

addPrivateProperty(o,"Age",function(x){return typeof x == "number"});
o.setAge(33);
console.log(o.getAge());