如何使用Lo-Dash扩展对象?

时间:2014-10-23 23:41:14

标签: javascript jquery object extend lodash

我无法使用Lo-Dash合并两个对象,但不明白为什么下面的代码不起作用。我希望_merge调用将bbb扩展为fnaaa,但这不会发生。

my={};
my.aaa=function() {}
my.aaa.prototype.fnaaa=function() {}

bbb={fnbbb:function() {}}
_.merge(bbb,new my.aaa());

jQuery $ .extend确实有效,如果我在下面运行代码,它会按预期扩展bbb:

my={};
my.aaa=function() {}
my.aaa.prototype.fnaaa=function() {}

bbb={fnbbb:function() {}}
$.extend(bbb,new my.aaa());

为什么会发生这种情况以及如何使用Lo-Dash做同样的事情?

编辑:是因为fnaaa不是可枚举的吗?如果是这样如何解决呢?

1 个答案:

答案 0 :(得分:3)

Lo-Dash _。合并仅复制对象的可枚举属性。根据定义,可枚举属性不包括原型。

这种行为的原因可以解释为您在某个对象上调用 _。keys ,您可能不希望原型方法出现在响应中。

  
    

https://lodash.com/docs#merge

         

"递归地合并源对象的自己的可枚举属性,     该..."

  

jQuery的 $ .extend 实际上会复制对象和原型:

  
    

http://api.jquery.com/jQuery.extend/

         

"但是,从对象原型继承的属性将被复制过来。"

  

我总结一下,事实上Lo-Dash意味着重量轻,jQuery意味着功能更丰富。我知道这并没有回答“怎么回事?'但也许它回答了“为什么?'。

。”

为简洁起见,我们更多关于可枚举的属性: http://www.2ality.com/2011/07/js-properties.html