jQuery $.extend() - 如果新成员不存在,如何不向第一个对象添加新成员?
我刚刚在使用 jQuery 扩展 javascript 对象时偶然发现了一个小问题。执行时,
var item = $.extend(options.itemDefaults, item);
options.itemDefaults
会使用 item
中已有的属性进行扩展,并将结果传递给 item
。到目前为止,一切都很好。
但下一次执行此行时,options.itemDefaults
将具有 item
具有的所有属性值,而不是原始默认值。我的默认值丢失了!
我意识到我可以简单地将默认对象存储在临时变量中,然后扩展临时变量,但这似乎有点冗长。有没有一种方法可以做我想做的事情(用提供的值覆盖默认值,在没有提供值时采用默认值,但不更改默认对象)而不需要绕道?
更新:看来这并不像我希望的那么容易解决。当我
var defaults = options.itemDefaults;
var $item = $.extend(defaults, { attributeModel: options.attributeModel }, item);
defaults = undefined
在每次迭代中执行此操作时,我仍然会在 options.itemDefaults
上添加来自 item
的属性!我该如何解决这个问题?
I just stumbled over a small problem when extending javascript objects using jQuery. When executing
var item = $.extend(options.itemDefaults, item);
options.itemDefaults
is extended with the properties that are already in item
and the result is passed to item
. So far, so good.
But the next time this line is executed, options.itemDefaults
has all the property values that item
had, instead of the original defaults. My defaults are lost!
I realize I could simply store the defaults object in a temporary variable, and extend the temporary variable instead, but it seems a bit lengthy. Is there a way to do what I'm after (overriding default values with supplied ones, taking defaults when no values are supplied, but not changing the default object) without that detour?
Update: It seems this wasn't as easy to get around as I hoped. When I do
var defaults = options.itemDefaults;
var $item = $.extend(defaults, { attributeModel: options.attributeModel }, item);
defaults = undefined
in each iteration, I still add properties from item
on options.itemDefaults
! How do I get around this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试一下,
true
标志表示 必须进行深层复制。我们使用空对象
{}
作为目标,因此默认值不会被篡改。options.itemDefaults
和item
的属性将被复制到空对象中。Try,
The
true
flag indicates that a deep copy must be made.We use an empty object
{}
as the target so the defaults are not tampered with.Properties of
options.itemDefaults
, anditem
will be copied into the empty object.