2011-11-28 72 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引擎如何实现每个构建。我怀疑数组会消耗比对象更少的内存,但简单对象(如这里)和数组之间的区别可能不是很重要。