2011-05-23 62 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; 
} 

而且這也可以。