Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery$.extend不覆盖目标属性_Javascript_Jquery - Fatal编程技术网

Javascript jQuery$.extend不覆盖目标属性

Javascript jQuery$.extend不覆盖目标属性,javascript,jquery,Javascript,Jquery,是否可以在不覆盖已设置的属性的情况下扩展对象? 在下面的示例中,我正在寻找一种方法,为猫添加两个翅膀,但保留它的4条腿 var cat = { legs: 4 }; var bird = { legs: 2, wings: 2 } // some references in my application to the original cat var some_cat = cat; $.extend( cat, bird ); // expected { legs: 4, wings:

是否可以在不覆盖已设置的属性的情况下扩展对象? 在下面的示例中,我正在寻找一种方法,为猫添加两个翅膀,但保留它的4条腿

var cat  = { legs: 4 };
var bird = { legs: 2, wings: 2 }

// some references in my application to the original cat
var some_cat = cat;

$.extend( cat, bird );

// expected { legs: 4, wings: 2 }
console.log( some_cat );
更新

我忘了在原始问题/示例中明确说明,但重要的是它修改了原始cat对象。

尝试类似的操作-

for (prop in bird) {
    if(!cat.hasOwnProperty(prop)) {
        cat[prop] = bird[prop];
    }
}

在cat={legs:4,wings:2}

$.extend(bird,cat)
?@Brewal之后,您的代码是正确的,但我认为Dirk的逻辑是,
cat
是原始对象,因此被作为
$.extend
的第一个参数……事实上@silkfire,很抱歉,我的示例不是很清楚。我已经更新了这个问题。如果你想保留cat的设置,我认为“逻辑”应该是将
bird
作为“原始对象”,并将其作为第一个参数。这正是您要寻找的行为。我不明白为什么它不是一个解决方案。因为在我的应用程序中已经有对
cat
的引用。切换参数不会更新原始的
cat
对象。+1表示无jQuery;)另外,您可能希望添加
var prop
,而不仅仅是
prop
,以使变量成为局部变量,而不是隐含的全局变量。这似乎是可行的-请原谅我的无知,但是$.extend做了什么,而这个简单的JS没有做什么?这只是深度复制和浅层复制吗?不,据我所知,$.extend不遵循浅层复制。它只是覆盖从object2到object1的所有属性。有关$.extend()的详细信息