【发布时间】:2012-06-07 07:35:52
【问题描述】:
我有一个程式化形式的设置,如下所示:
(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 名称和属性名称相同。这对我来说更容易,但对你们来说可能不是:)
【问题讨论】:
-
您的“风格化形式”示例是无效的 Javascript,因此无法测试。在不知道填充
db.com的代码与产生错误的代码之间的关系的情况下,没有人能猜到哪里出了问题。 -
@lanzz 谢谢。哪个位无效(以及如何)?填充
db.com的位还是尝试访问其内容的位? -
填充代码。您不能使用与 object-literal 相同的语法来初始化数组元素(即,
[ 324: { ...是语法错误)。修复人口中的错误后,您的访问代码将按预期工作:jsfiddle.net/4bL8T -
@lanzz 感谢 jsfiddle。如果我 (1) 添加一个属性到 db
com: {}然后 (2) 将我的填充循环更改为:this.com[com.cnum] = {unmod: com.unmod};我改变了我的想法,我将如何执行此操作,却忘记了我插入了 @ 987654334@ 对象。输入一些内容作为答案,我会打勾并 +1 :)
标签: javascript object methods closures