2010-04-16 62 views
2

我有一個對象,它具有創建對象時設置的幾個屬性。JavaScript文字初始化循環

該對象最近更改爲對象字面符號,但我遇到了一個問題,即在網上搜索時無法顯示。

簡單地說,我需要做的:

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

如何初始化屬性在對象的文字符號構造?

回答

3
  1. 您可以使用匿名函數動態創建數組:

    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. 你可以做到這一點的字面定義後:

    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

你不能。對象表示法不允許這樣做。但是,您可以在初始化對象之後添加屬性。

順便說一下,self已經是一個已定義的對象,它是窗口對象的別名。當你定義一個名爲self的臨時對象時[因此,你並沒有擺脫window.self],這並不是你所要做的。就好像self是一個關鍵字,您當前的使用情況是非法的。

+0

這讓我擔心兩個人試過這種方法 – 2010-04-16 06:02:24

+0

有兩個人試過這種方法嗎? – 2010-04-16 08:03:51

1

對於本具體的例子,你可以使用一個匿名函數,像這樣:

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