Javascript对象&方法:什么可以看到什么,为什么?

时间:2012-06-07 07:35:53

标签: javascript object methods closures

我有一个以程式化形式设置的设置:

(function () {
    var db = {
        com: {                    EDIT: Changed this from [...] to {...}
            324: {
                unmod: "xyz"
            }
        }
    };

    var report = {
        mymethod: function () {
            var x = db.com[324].unmod;
        }
    };
})();

我收到的错误消息是db.com is undefined。在我看来,report.mymethod无法“看到”db.com。那是对的吗?

一个因素可能是db.com是通过循环遍历AJAX数据创建的:

    for (i = 0; i < length1; i++) {
            cat = o.cat[i];
            length2 = cat.com.length;

            // Loop through comments
            for (j = 0; j < length2; j++) {
                com = cat.com[j];

                // Create db object
                this[com.cnum] = {
                    unmod: com.unmod
                };
            }               
    }

这个问题是关闭的吗?

AJAX数据的相关部分就是这样

       "cat":[  
        { ...
          "com": [ {"cnum":"324", "unmod":"xyz"},...]  
        }, ...],

抱歉AJAX名称和属性名称相同。它让我更容易,但也许不适合你们:)

2 个答案:

答案 0 :(得分:2)

示例代码在修复填充部分后按预期工作:http://jsfiddle.net/4bL8T/

答案 1 :(得分:-1)

在执行此代码之前:

(function () {
var db = {
    com: [
        324: {
            unmod: "xyz"
        }
    ]
};

var report = {
    method: function () {
        var x = db.com[324].unmod;
    }
};})();

通过console.log检查db.com对象的范围,如果对象未定义,则需要在使用之前定义它。