2013-05-11 147 views
6

我正在学习来自.NET背景的JavaScript。我有一个关于如何处理对象数组的问题,创建和操作并不像.NET那么简单/明显。在javascript中创建对象的数组

常在.NET代码我用于管理简单的值的构建体,例如(在VB.NET)结构(C#)或结构(VB.NET):

Public Structure WidgetsStruc 
     Public Name As String 
     Public LocX As Integer 
     Public LocY As Integer 
    End Structure 
    Private myWidgets As New WidgetsStruc 
    myWidgets.LocX = 35 
    myWidgets.LocY = 312 
    myWidgets.Name = "compass" 
    Messagebox(myWidgets.Name)    ' shows 'compass' 
    ... 
在javascript

从研究我这样做有没有什么比较等价的,虽然你可以使用一个对象和“推”它在阵列像下面这些工作:

var widget = new Object(); 
    var widgetTemplates = new Array(); 
    widgetTemplates.push(widget); 
    widgetTemplates[0].name = "compass"; 
    widgetTemplates[0].LocX = 35; 
    widgetTemplates[0].LocY = 312; 
    alert(widgetTemplates[0].name);   // also shows 'compass'   

也许我不习惯在一个更宽松类型的工作但上面的JavaScript似乎并不是最优的(例如,必须在没有声明的情况下“推”对象红色结构放入数组中,然后初始化变量,加上'pop'和'slice'去除)。

我有这个权利吗?使用对象数组声明&有更好还是更简单的方法吗?我也研究过JSON,但不完全确定如何使用它来操作数组中的用户定义对象。

作为JavaScript的n00b - 感谢您的任何指导!

+0

你的方法真的很好。 – 2013-05-11 07:18:52

+0

谢谢 - 我有点从研究中推断出这一点,但并不确定它是最佳的。 – deandob 2013-05-11 07:25:25

回答

10

您可以使用对象和数组文字符号:

var widgetTemplats = [ 
    { 
     name: 'compass', 
     LocX: 35, 
     LocY: 312 
    }, 
    { 
     name: 'another', 
     LocX: 52, 
     LocY: 32 
    } 
] 

对于这样简单的事情,缺乏强制执行结构是相当正常的。如果你想要更强制的结构,或将行为附加到你的对象,你应该看看JavaScript中的类:

var Widget = function(name, x, y) { 
    this.name = name; 
    this.LocX = x; 
    this.LocY = y; 
}; 

var widgets = [ 
    new Widget('compass', 35, 312), 
    new Widget('another', 52, 32) 
]; 
+0

我认为这可能是我所追求的,因为它有更多的结构。我会更多地玩这个。谢谢。 – deandob 2013-05-11 07:26:44

+0

我可以使用'push'来扩展新对象的数组。 – deandob 2013-05-11 07:40:09

+0

很好的例子!爱你提供了两种方式来做到这一点。 – 2015-08-11 15:29:29