从数组内部取消引用JavaScript属性

时间:2017-07-25 16:32:17

标签: javascript reference dereference

我正在尝试取消引用JavaScript对象上的属性,但是没有得到预期的结果。

我有一个Knockout视图模型数组(我不认为问题是Knockout特定的),每个都有一个可观察的Selected。我添加了对此observable的订阅,以便在crossSelectTargetLangs的值更改时调用函数Selected

此外,我在for...循环中添加了此订阅。

var tl = 0,
    tlMax = allLangVMs.length,
    vmLang,
    selectedCode;

// for each 'vmLang' view-model in the 'allLangVMs' array...
for (; tl < tlMax; tl++) {

    // local variable for the context view-model    
    vmLang = allLangVMs[tl];

    // add the subscription to this observable    
    vmLang.Selected.subscribe(function() {

        // de-reference the vmLang.Code property
        selectedCode = (function(code) {
            return code;
        }(vmLang.Code));

        // pass the de-ref'd value to the target function    
        crossSelectTargetLangs(selectedCode);
    });
}

但是,无论哪个视图模型更新了Selected observable,传递给目标函数的参数始终是数组中最后一个元素的Code ie 它似乎没有取消引用。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是你在错误的地方进行解除引用。 代码应如下所示:

&#13;
&#13;
var tl = 0,
    tlMax = allLangVMs.length,
    vmLang,
    selectedCode;

// for each 'vmLang' view-model in the 'allLangVMs' array...
for (; tl < tlMax; tl++) {

    // local variable for the context view-model    
    vmLang = allLangVMs[tl];

    (function(vmLangParam) {   
      vmLangParam.Selected.subscribe(function() {   
          crossSelectTargetLangs(vmLangParam.Code);
      });
    })(vmLang);
    
}
&#13;
&#13;
&#13;