我想创建一个变量,使foo.properties
返回{default:{x:undefined}}
。但是,您可能会注意到,属性变量不能直接编辑,因此__defineGetter__
用于使其可读,但不可写。具有隐藏功能的Javascript对象?
问题是我还希望属性成为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
被设置吸气返回变量properties
代替this.properties
。因此properties
直接进行编辑。也许有可能使getter的返回值与实际的properties
变量分开吗?
也许你想从getter返回一个新对象,一个'properties'视图? –
我给它一个镜头,但问题依然存在。不错的主意,但! –
如果不在'properties'对象上,'attr'应该放在哪里? – Bergi