【问题标题】:De-referencing a JavaScript property from inside an array [duplicate]从数组内部取消引用 JavaScript 属性 [重复]
【发布时间】:2017-12-31 17:10:01
【问题描述】:

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

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

此外,我将此订阅添加到 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 可观察值更新,传递给目标函数的参数始终是数组中最后一个元素的 Codeie '似乎没有取消引用。

我做错了什么?

【问题讨论】:

标签: javascript reference dereference


【解决方案1】:

问题是您在错误的地方进行了取消引用。 代码应如下所示:

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);
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    相关资源
    最近更新 更多