2010-04-16 8 views
2

je un objet qui possède plusieurs propriétés qui sont définies lorsque l'objet est créé.javascript de boucle d'initialisation littéral

Cet objet a récemment changé d'objet notation littérale, mais je l'ai touché un peu d'un problème que la recherche sur le net ne révèle pas.

simplement déclaré que je dois faire ceci:

Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) { 
    var self = { 
     id: _id, 
     // other properties 
     links: [], 
     for (var i=0,j=0;i<8;i++) { //<- doesn't like this line 
      var k = parseInt(_links[i]); 
      if (k > 0) { 
       this.links[j++] = k; 
      } 
     }, 
     // other methods 
    }; 
    return self; 
}; 

Comment puis-je initialiser une propriété dans le constructeur en objet notation littérale?

Répondre

3
  1. Vous pouvez créer le tableau à la volée en utilisant une fonction anonyme:

    Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) { 
        var self = { 
         id: _id, 
         // other properties 
         links: (function() { 
          var a = []; 
          for (var i=0;i<8;i++) { 
           var k = parseInt(_links[i]); 
           if (k > 0) { 
            a.push(k); 
           } 
          } 
          return a; 
         })(), 
         // other methods 
        }; 
        return self; 
    }; 
    
  2. Vous pouvez le faire après est définie littérale:

    Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) { 
        var self = { 
         id: _id, 
         // other properties 
         links: [], 
         // other methods 
        }; 
        for (var i=0,j=0;i<8;i++) { 
         var k = parseInt(_links[i]); 
         if (k > 0) { 
          self.links[j++] = k; 
         } 
        } 
        return self; 
    }; 
    
0

Vous ne pouvez pas. La notation d'objet ne le permet pas. Cependant, vous pouvez ajouter les propriétés après l'initialisation de votre objet.

Par ailleurs, self est un objet déjà défini, qui est un alias de l'objet de fenêtre. Pendant que vous définissez un objet temporaire nommé self [et donc, vous ne vous débarrassez pas de window.self] ce n'est pas quelque chose que vous devez faire. Agir comme si self était un mot clé et votre utilisation actuelle est illégale.

+0

Il me inquiète que deux personnes ont essayé cette approche –

+0

Deux personnes ont essayé cette approche? –

1

Pour cette exemple spécifique, vous pouvez utiliser une fonction anonyme, comme ceci:

Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) { 
    var self = { 
     id: _id, 
     // other properties 
     links: (function(){ 
      var links = []; 
      for (var i=0;i<8;i++) { 
       var k = parseInt(_links[i]); 
       if (k > 0) { 
        links.push(k); 
       } 
      } 
      return links; 
     })(), 
     // other methods 
    }; 
    return self; 
};