一个JS对象定义如下:
var obj = {
key1 : {on:'value1', off:'value2'},
key2 : {on:'value3', off:'value4'}
}
当没有属性传递obj.key1时,是否有一种棘手的方法,在'属性上选择默认的key1'?
var key1State = obj.key1; // I want to receive 'value1' here, not obj.key1{...}
通常可以在对象定义体中识别在对象调用期间传递/询问哪个属性(如果有的话)?
答案 0 :(得分:2)
我不确定这是否是您所需要的,但可能正是您要找的valueOf
或toString
。
例如:
var obj = {
key1 : {on:'value1', off:'value2', toString : function(){ return this.on; }},
key2 : {on:'value3', off:'value4', toString : function(){ return this.on; }}
}
var key1State = obj.key1; // the object
var key1StateStr = '' + obj.key1; // string "value1"
obj.key1 == "value1" // true
obj.key1.toString() === "value1" // true
因此,如果你打算在某个地方使用默认值作为字符串,这可能会有用。
答案 1 :(得分:0)
这不能解决您的问题,但您可能会发现它很有用。
使用getters。
var obj = {
key1 : {on:'value1', off:'value2'},
key2 : {on:'value3', off:'value4'},
get fooBar () { return this.key1.on }
}
现在obj.fooBar返回keyq.on
答案 2 :(得分:0)
我理解你的想法,但认为更好的方法是使用像getState
这样的函数来获取对象的实际状态。
var obj = {
key1: {on:'value1', off:'value2'},
key2: {on:'value3', off:'value4'}
};
var key1State = getState(obj.key1);
var key2State = getState(obj.key2.off);
function getState(obj) {
return obj.on || obj;
}
console.log(key1State, key2State);