2011-05-23 2 views
1

Je suis en train de créer un tableau de « classes » comme ceci:Javascript - Tableau des « 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); 
} 

Lorsque vous tentez d'imprimer le nom de l'élément, je reçois « undefined ». Y a-t-il plus que cela? Data.field.name est définitivement défini.

Répondre

3

Une boucle des boucles for..in par touches, et non pas des valeurs. Changer à:

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

Le problème est que vous appelez votre fonction « init() » dans la section «() » sans objet de contexte. Ainsi, this n'est pas l'objet que vous voulez qu'il soit. Essayez ce changement:

function Item(data) { 
    var item = this; 
    function init(data) { 
    item.id = data.pk; 
    item.name = data.fields.name; 
    } 
    init(data); 
} 

Maintenant, je ne sais pas pourquoi vous voudriez écrire la fonction de cette façon en premier lieu; cette petite fonction "init()" ne fait vraiment rien d'utile. Il pourrait simplement être:

function Item(data) { 
    this.id = data.pk; 
    this.name = data.fields.name; 
} 

et cela fonctionnerait aussi.