在javascript中分配对象时,我们如何确定未分配已分配对象中已存在的属性。比如说:
var foo = {
property1: "a",
property3: "d"
}
var bar = {
property1 : "b",
property2 : "c"
}
然后
a = b
会将property1
中的foo
替换为b
。在我考虑的上下文中,我们不确定在赋值发生时foo
的property1是否存在。因此,在分配选项时,请检查property1
是否存在,如果不存在,则从property1
分配b
。如此简单的a=b
赋值不是一种选择。那么有没有办法分配一个对象,该对象只会追加分配给对象的属性,而不是替换现有的属性。
我想有一种方法可以:
for(var prop in b){
if(!(a[prop])){
a[prop] = b[prop];
}
}
有更好的速记方式吗?
答案 0 :(得分:1)
听起来你想要像jQuery.extend:http://api.jquery.com/jquery.extend/。
但假设您不想使用jQuery,这里是一个本机JS实现示例,它也支持嵌套(深层)对象(http://jsfiddle.net/DqgYQ/):
function extend(target, src, deep){
if(typeof target !== 'object' || typeof target === 'undefined' || target === null) return target;
for(var prop in src){
var value = target[prop];
var copy = src[prop];
if(deep && typeof copy === 'object'){
value = typeof value === 'undefined' ? {} : value;
target[prop] = extend(value, copy, deep);
}
else{
target[prop] = copy;
}
}
return target;
};
请参阅小提琴,了解一个有效的例子。