【问题标题】:jQuery $.extend without overriding target propertiesjQuery $.extend 不覆盖目标属性
【发布时间】:2013-08-19 07:41:34
【问题描述】:

是否可以在不覆盖已经设置的属性的情况下扩展对象? 在下面的示例中,我正在寻找一种方法来为猫添加 2 个翅膀,但保留它的 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 );

更新

我忘了在原来的问题/例子中说清楚,但重要的是它修改了原来的猫对象。

【问题讨论】:

  • $.extend(bird, cat) ?
  • @Brewal 您的代码是正确的,但我认为 Dirk 的逻辑是 cat 是原始对象,因此将其作为 $.extend 的第一个参数...
  • 确实@silkfire,抱歉我的例子不是很清楚。我已经更新了问题。
  • 如果您想保留 cat 的设置,我认为“逻辑”是将bird 作为“原始对象”,因此将其作为第一个参数。这是您正在寻找的确切行为。我不明白为什么这不是一个解决方案。
  • 因为我的应用程序中已经引用了cat。切换参数不会更新原始的cat 对象。

标签: javascript jquery


【解决方案1】:

尝试类似 -

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

在 cat = {腿:4,翅膀:2}之后

【讨论】:

  • +1 表示没有 jQuery ;) 此外,您可能希望添加 var prop 而不仅仅是 prop 以使变量成为局部变量而不是隐含的全局变量。
  • 这似乎有效 - 请原谅我的无知,但是 $.extend 做了什么而这个简单的 JS 没有做呢?只有深拷贝和浅拷贝吗?
  • 不,据我所知 $.extend 不遵循浅拷贝。它只是覆盖了从 object2 到 object1 的所有属性。有关 $.extend() 的更多信息read this link
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2020-01-14
  • 2012-03-11
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多