Javascript jQuery$.extend不覆盖目标属性
是否可以在不覆盖已设置的属性的情况下扩展对象? 在下面的示例中,我正在寻找一种方法,为猫添加两个翅膀,但保留它的4条腿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:
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()的详细信息