我想創建一個變量,使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