gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:42:14 26 4
gpt4 key购买 nike

我在使用 Lo-Dash 合并两个对象时遇到问题并且不明白为什么下面的代码不起作用。我希望 _merge 调用用 fnaaa 扩展 bbb,但这并没有发生。

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)方法。

https://lodash.com/docs#merge

"Recursively merges own enumerable properties of the source object(s), that..."

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

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

"However, properties inherited from the object's prototype will be copied over.. "

我将其总结为 Lo-Dash 意味着轻量级而 jQuery 意味着功能更丰富的事实。我知道这不能回答“如何?”但它也许可以回答“为什么?”。

为简洁起见,这里有一些关于可枚举属性的更多信息: http://www.2ality.com/2011/07/js-properties.html

关于javascript - 如何使用 Lo-Dash 扩展对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com