Javascript - '类'数组

时间:2011-05-23 16:47:36

标签: javascript

我正在努力创建一系列的课程'像这样:

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

当试图打印出项目名称时,我得到了&#34;未定义&#34;。它还有更多吗? Data.field.name肯定是设置的。

3 个答案:

答案 0 :(得分:3)

不要使用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

答案 1 :(得分:3)

for..in循环遍历键,而不是值。将其更改为:

for(var i = 0; i < item_array.length; i++) {
    console.log(item_array[i].name);
}

答案 2 :(得分:0)

问题是你在“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;
}

这也可以。