//闭包,私有变量的储存
function makeProperty(/* object*/o,/*name*/ name,/*function*/predicate){
var result;
o["get"+name]=function(){
return result;
}
o["set"+name]=function(v){
if(predicate&&!predicate(v)){
throw "set" +name+": invalid value "+v;
}else{
result=v;
}
};
}
function predicateTest(){
var o={};
makeProperty(o,"Name",function(x){
return typeof x=="string";
});
o.setName("Frank");
alert(o.getName());
o.setName(0);
}