【发布时间】:2014-03-14 18:06:15
【问题描述】:
我遇到了一个奇怪的情况,我一直使用下划线的extend library和_.extend命令,方式如下:
var extended = extend({}, objA, objB);
我只从结果中的一个对象中获取属性,是否有任何关于 extend 的内容可能会阻止它从两个对象中获取所有属性?
我在任何地方都使用过这种模式,到目前为止它似乎按预期工作。两者都是普通对象,而不是数组或函数。
编辑:我尝试制作一个演示,但它似乎可以与 jQuery 和 Underscore 一起使用 - http://jsfiddle.net/x4UHQ/2/
在制作演示时(来自我在日志中打印的对象),我注意到一个在console.log 中打印时没有显示为字符串 - 它是一种猫鼬类型的 ObjectId,也许这是导致问题的原因? (那个特定的字段存在于输出对象中,所以我不知道)
更新:这是解决方案 - UnderscoreJS wont extend object(在 mongoose 查询中添加一个精简选项 - 因为这会以某种方式使对象与下划线不兼容。
【问题讨论】:
-
将objA和objB的内容放入题中
-
我将尝试构建一些可以复制问题的东西,我只是觉得这样做太荒谬了,因为这是我希望我的代码在我一直使用的实用命令上破坏的最后一个地方跨度>
-
underscore 库已经过测试,用于大型网站。而extend是最流行的功能之一。所以我会打赌extend中的一个错误。
-
您是否在偶然寻找recursive extension or deep merging?
_.extend()只执行 shallow 合并,或仅执行objA和objB自己的属性。它不会合并它们各自持有的对象。 -
objA 的属性名称是否可能与 objB 中的相同?在这种情况下,一个会覆盖另一个。
标签: javascript node.js underscore.js extends