node Object.assign(obj1,obj2,obj3)返回obj3的json属性

时间:2017-11-14 14:04:30

标签: javascript json node.js mongodb mongoose

我对mongodb有一些封装的mongoose查询。

collection1.findOne({ parm: value}, function(err, item){
    var a = item.a;
    var b = item.b;
    collection2.findOne({parm1: a}, function(err, item2){
        collection3.findOne({parm2: b}, function(err, item3){
            var records = Object.assign(item, item2, item3);
        });
    });
});

如果我在分配所有对象之前打印item,item2和item3打印不同以及一些相同的属性。当我在var记录行之后打印记录时,它只显示item3 json属性。

根据它应该documentation

  

将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

哪个没有发生。我做错了什么或这是预期的行为?

我需要async库。导入是否有可能改变object.assign的行为?

1 个答案:

答案 0 :(得分:0)

  

当我在var记录行之后打印记录时,它只显示item3   json属性。

根据spec

  

iii)如果desc未定义且desc。[[Enumerable]]为真,那么

     

a)让propValue为Get(from,nextKey)。

     

b)ReturnIfAbrupt(propValue)。

     

c)设置状态为Set(to,nextKey,propValue,true)。 //观察此行

     

d)ReturnIfAbrupt(状态)。

因此,这是一个预期的行为,因为分配工作

  • 将值从左侧源向右分配
  • 并且不会检查是否已设置属性

<强>演示

&#13;
&#13;
var a = {a:1, b:2};
var b = {b:3, c:4};
var c = Object.assign( {}, a,b );
console.log(c); 
&#13;
&#13;
&#13;

观察输出会覆盖b属性

  

{&#34; a&#34;:1,&#34; b&#34;:3,&#34; c&#34;:4}