我想创建一个foo.properties
返回的变量{default:{x:undefined}}
。但是,您可能会注意到 properties 变量不可直接编辑,因此__defineGetter__
用于使其可读但不可写。
问题是,如果您愿意,我还希望属性成为getter的一部分,而不是属性变量的一部分。然而,当您foo.properties
在控制台中输入时,它会返回{default:{x:undefined},attr:function(){ [native code] }}
. 如何阻止 attr 与属性变量关联?
var foo = new (function(){
var properties = {
default:{
x:undefined
}
};
this.__defineGetter__('properties',(function(){return properties;}).bind(this));
this.properties.attr = (function(attr,value){
var attr = attr.split('.');
var recursive = function(attr,output,value){
if(attr.length>1){
return recursive(attr.slice(1),output[attr[0]],value);
}else{
if(value!=undefined){output[attr[0]] = value;};
return output[attr[0]];
};
};
return recursive(attr,properties,value || undefined);
}).bind(this)
});
谢谢!
编辑
我认为当this.properties.attr
设置getter时返回变量properties
代替this.properties
. 因此properties
直接被编辑。也许可以使getterproperties
的返回值成为与实际变量分开的实体?