问题
我在不可靠的不同位置声明父对象的某些属性,这样在我声明这些属性时很难预测父对象是否存在。无论发生在哪里,我都需要创建父对象,如果它尚不存在,但如果有,则不再重新声明。
示例
说我在某处发生了这个JavaScript:
membership = {
id: 5,
name: "John"
}
在代码中的另一个点(可能在上面的代码块之前或之后),我有类似的东西:
membership.level = "gold";
我基本上需要能够membership.level
创建membership
对象(如果尚不存在),但如果它确实存在,只需添加level
属性即可。同样,第一个代码块需要以这样的方式工作:如果membership
已经存在,它只会添加id
和name
属性。
我已经实施的守则
我的解决方案不起作用,但我认为你将能够看到我的目标。这就是我试过的:
第1块
membership = $.extend(membership, {
id: 5,
name: "John"
});
第二块
membership = $.extend(membership , {
level: "gold"
});
如果未定义成员资格,有时会出现上述错误。有没有办法以我描述的方式做到这一点?提前谢谢。
答案 0 :(得分:5)
var membership = $.extend({}, membership , {
level: "gold"
});
JSFiddle:http://jsfiddle.net/gJ9d4/
答案 1 :(得分:0)
试试这个:
membership = $.extend(membership || {} , {
level: "gold"
});
如果未定义成员资格,则会创建一个对象。
<强> Fiddle 强>
答案 2 :(得分:0)
的 jsFiddle Demo
强> 的
通常,这是通过||
运算符
var membership = membership || { id: 5, name: "John" };
基本上,如果未定义membership
,则将成员资格设置为等于对象定义,但如果定义了membership
,则只需重新分配。
如果您愿意,可以使用扩展调用来执行此操作。
//this could be used as the extend membership
var membership = membership || { id: 5, name: "John" };
membership = $.extend(membership , {
level: "gold"
});//this could also be membership.level = "gold";