【问题标题】:How to extend object with Lo-Dash?如何用 Lo-Dash 扩展对象?
【发布时间】:2014-12-19 18:48:04
【问题描述】:

我在使用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 不可枚举吗?如果有怎么解决?

【问题讨论】:

    标签: javascript jquery object extend lodash


    【解决方案1】:

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

    这种行为的原因可以解释为如果您在一个对象上调用 _.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多