jquery将对象存储在数据中作为参考,为什么?

时间:2015-12-23 18:58:34

标签: jquery

抱歉标题不好。

请参阅以下小提琴:

https://jsfiddle.net/pw9e0yun/2/

$(this).data("item", "item-no-" + (index));
$(this).data("options", options);  /* how to store options not as a reference */

我喜欢数据" item"存储("原样")。但我不喜欢数据"选项"被储存了。这让我很难弄清楚过去几个小时。现在我意识到该选项存储为一种引用。为什么会这样,我怎样才能轻松存储"当时"元素数据中options对象的值。

感谢您的澄清。

(顺便说一句:错误"链接到jsfiddle.net必须附带代码"是愚蠢的)

1 个答案:

答案 0 :(得分:1)

它将它存储为引用,因为它们的对象和引用如何在JavaScript中工作。 data写入存储区域,该存储区域基本上是您要添加属性的JavaScript对象。 (正如有些人认为的那样,它并没有写入data-*属性。它会从它们初始化数据存储,这有时让人感到惊讶。)

如果要存储对象的副本,则必须复制它。有许多不同的方法可以在JavaScript中复制对象(包括jQuery'自己的$.extend)。您使用哪一个完全取决于您的最终目标。

因此可能有效,具体取决于options是什么以及您的最终目标是什么:

$(this).data("options", $.extend({}, options));
// or
$(this).data("options", $.extend(true, {}, options));