我在使用 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 不可枚举吗?如果是如何解决?
最佳答案
Lo-Dash 的 _.merge 只复制对象的可枚举属性。根据定义,可枚举属性不包括原型(prototype)。
可以解释这种行为的原因,就像您在对象上调用 _.keys 一样,您可能不希望原型(prototype)方法出现在响应中。
jQuery 的 $.extend 实际上会复制对象和原型(prototype):
我将其总结为 Lo-Dash 旨在轻量级,而 jQuery 旨在提供更丰富的功能。我知道这不能回答“如何?”但它也许可以回答“为什么?”。
为简洁起见,这里有更多关于可枚举属性的信息:
http://www.2ality.com/2011/07/js-properties.html
关于javascript - 如何使用 Lo-Dash 扩展对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26539309/