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

时间:2011-04-22 20:11:20

标签: jquery reference scope

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

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

我希望的输出是:

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

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

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

我该怎么办?

2 个答案:

答案 0 :(得分:5)

如果您在.data()中存储对象(或数组),那么您实际上是在存储引用,所以如果您这样做:

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

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

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

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

$(el).data('obj')仍然是5。

答案 1 :(得分:2)

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

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

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

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

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