2011-05-23 53 views
1

我想,像这样创建“类”的数组:使用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); 
} 

当试图打印出项目名称,我得到“未定义”。除此之外还有更多吗? Data.field.name是肯定设置的。

回答

3

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

for(var i = 0; i < item_array.length; i++) { 
    console.log(item_array[i].name); 
} 
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; 
} 

而且这也可以。