javascript - 为什么我的属性分配不正确?

标签 javascript

我创建了一个 ObservablePropertyList ,它应该在属性更改时执行回调。实现是:

function ObservablePropertyList(nameCallbackCollection) {
    var propertyList = {};

    for (var index in nameCallbackCollection) {

        var private_value = {};

        propertyList["get_" + index] = function () { return private_value; }
        propertyList["set_" + index] = function (value) {

            // Set the value
            private_value = value;

            // Invoke the callback
            nameCallbackCollection[index](value);
        }
    }

    return propertyList;
}

这是一个快速测试演示:

var boundProperties = BoundPropertyList({
    TheTime: function (value) {
        $('#thetime').text(value);
    },
    TheDate: function (value) {
        $('#thedate').text(value);
    }
});

var number = 0;

setInterval(function () {
    boundProperties.set_TheTime(new Date());
    boundProperties.set_TheDate(number++);
}, 500);

但由于某种原因,属性未正确分配或发生其他原因。也就是说,由于某种原因调用 set_TheTime 会执行 set_TheDate 的回调,几乎就像将所有内容都绑定(bind)到列表中的最后一项一样。我一生都无法弄清楚我做错了什么。

最佳答案

当使用这样的循环时,您需要将其包裹在外壳中

function ObservablePropertyList(nameCallbackCollection) {
    var propertyList = {};

    for (var index in nameCallbackCollection) {
        (function(target){
           var private_value = {};

           propertyList["get_" + index] = function () { return private_value; }
           propertyList["set_" + index] = function (value) {

               // Set the value
               private_value = value;

               // Invoke the callback
               target(value);
           }
        })(nameCallbackCollection[index]);
    }

    return propertyList;
}

关于javascript - 为什么我的属性分配不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17796817/

相关文章:

javascript - 在 javascript 中检测 HTML5 拖放支持

javascript - GET 方法总是接收空值

javascript - ng-repeat 具有不同值的各种 json 对象

javascript - jQuery 对 javascript 类方法的 AJAX 调用

javascript - 动态谷歌图表的工具提示错误

javascript - JavaScript CMS框架类似于Pligg吗?

javascript - ionic 推送通知应用程序

javascript - 使用 Selenium IDE 调整窗口大小

javascript - React-native MobX @observable 始终是未定义的

javascript - 我怎样才能找到被调用函数在哪个引用的js脚本中