我正在尝试创建一个“classes”数组,如下所示:
function Main(initURL){
var item_array = [];
this.initURL = initURL;
function construct() {
$.ajax({
url: initURL,
dataType: 'json',
success: function(data){
for(var i=0;i<data.length;i++){
var item = new Item(data[i]);
item_array.push(item);
}
init();
}
});
}
function init() {
setInterval(update, 1000);
}
function update() {
for(var item in item_array){
console.log(item.name);
}
}
construct();
}
function Item(data) {
var dirty = false;
function init(data) {
this.id = data.pk;
this.name = data.fields.name;
}
init(data);
}当我试图打印出项目名称时,我得到了“未定义”。还有比这更多的东西吗?Data.field.name肯定已经设置好了。
发布于 2011-05-24 00:51:41
for..in循环通过键循环,而不是值循环。将其更改为:
for(var i = 0; i < item_array.length; i++) {
console.log(item_array[i].name);
}发布于 2011-05-24 00:51:22
不要使用for... in来迭代数组。
for(var i=0; i < item_array.length; i++){
console.log(item_array[i].name);
}https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in#Description
发布于 2011-05-24 00:52:19
问题是您在调用"Item()“中的"init()”函数时没有使用任何上下文对象。因此,this不是您想要的对象。尝试此更改:
function Item(data) {
var item = this;
function init(data) {
item.id = data.pk;
item.name = data.fields.name;
}
init(data);
}现在,我不确定为什么要以这种方式编写函数;这个小的"init()“函数实际上并没有做任何有用的事情。它可能只是:
function Item(data) {
this.id = data.pk;
this.name = data.fields.name;
}这也是可行的。
https://stackoverflow.com/questions/6100330
复制相似问题