Javascript - 在分配对象时不替换对象属性

时间:2014-08-09 07:58:11

标签: javascript

在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]; 
   }
}

有更好的速记方式吗?

1 个答案:

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

请参阅小提琴,了解一个有效的例子。