创建对jQuery.data键的本地引用

我正在对jQuery.data()进行一些测试,并且我正在尝试创建对某个数据键的本地引用,我希望它可以在本地更改并仍然影响“外部”。 我认为用一个例子会更好,因为我在jsFiddle上发布的半长代码而不是这里:

http://jsfiddle.net/esbenp/p4kt2/22/

我希望的输出是:

 {1: {length: 1}, total: 1} 

但只有length属性受到递增局部变量的影响:

 {1: {length: 1}, total: 0} 

我该怎么办?

如果你在.data()存储一个对象 (或数组),那么你实际上是存储了对它的引用 ,所以如果你这样做:

 var obj = { key: 'value' } $(el).data('obj') = obj; obj.key = 'new value'; 

$(el).data('obj').key也将是new value ,因为它是同一个对象

但是,如果存储的值是普通类型(例如数字或字符串),则将存储其副本

 var n = 5; $(el).data('obj') = n; n++; 

$(el).data('obj')仍为5。

我不会撒谎 – 代码令人难以置信的混乱。 您是否有必要使用所有这些自动执行function? 看来(至少对于这个外行人来说)你可以用更简单的方式来编写这个来实现你的目标。

无论如何,我不确定这是你正在寻找的答案,但我刚刚停止了AddError的调试器,所以我可以理解它的范围和可用的内容。 所以你需要做的就是让它返回你想要的输出是这样的:

http://jsfiddle.net/qN7wF/2/

 functions = { AddError: function() { console.log(total); $(container).data('errors').total++; errors.length++; }, 

但考虑到背景……我猜测必须有更多的发挥。