2011-11-28 92 views
5

我該如何去實現python的javascript中的namedtuple?理想情況下,我還希望能夠對一系列序列進行「映射」以將其變爲一系列命名爲「類」的對象。如何在javascript中實現python的namedtuple

// with underscore.js included... 
var points = [[1,2], [3,4], [4,5] 
var Point = namedlist('Point', 'x y') 
points = _.map(Point._make, points) 

point1 = points[0] 
var x = point1.x 
var y = point1.y 

請注意,我不希望有如下代碼每次「點」一個新的類,而是想產生一個新的類支持與給定的字段名稱列表項訪問的工廠函數。

附註:這個問題的一個假設是javascript地圖使用較少的內存列表。這個假設是否合理?

回答

5

你可以只使用類似

var namedlist = function(fields) { 
    return function(arr) { 
     var obj = { }; 

     for(var i = 0; i < arr.length; i++) { 
      obj[fields[i]] = arr[i];    
     } 

     return obj; 
    }; 
}; 

//use: 
var points = [[1,2], [3,4], [5,6]]; 
var Point = namedlist(['x', 'y']); 

points = _.map(Point, points); 

//Single item: 
var pt = Point([1,2]); 

至於內存使用,這取決於底層JS引擎如何實現每個構建。我懷疑數組會消耗比對象更少的內存,但簡單對象(如這裏)和數組之間的區別可能不是很重要。