jQuery.extend一个对象,无论它是否存在?

时间:2014-01-28 21:35:54

标签: javascript jquery

问题

我在不可靠的不同位置声明父对象的某些属性,这样在我声明这些属性时很难预测父对象是否存在。无论发生在哪里,我都需要创建父对象,如果它尚不存在,但如果有,则不再重新声明。

示例

说我在某处发生了这个JavaScript:

membership = {
    id: 5,
    name: "John"
}

在代码中的另一个点(可能在上面的代码块之前或之后),我有类似的东西:

membership.level = "gold";

我基本上需要能够membership.level创建membership对象(如果尚不存在),但如果它确实存在,只需添加level属性即可。同样,第一个代码块需要以这样的方式工作:如果membership已经存在,它只会添加idname属性。

我已经实施的守则

我的解决方案不起作用,但我认为你将能够看到我的目标。这就是我试过的:

第1块

membership = $.extend(membership, {
    id: 5,
    name: "John"
});

第二块

membership = $.extend(membership , {
    level: "gold"
});

如果未定义成员资格,有时会出现上述错误。有没有办法以我描述的方式做到这一点?提前谢谢。

3 个答案:

答案 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";