2011-11-29 32 views
3

我已决定(无论是勇敢还是愚蠢的还有待观察)决定增加我的JavaScript技能超出使用警报,我已经看着使用JavaScript的业务对象,希望创造一个有用的对象库,我然后可以进一步操作JSON或XML 。javascript对象可以有一个属性,它是另一种类型的对象的集合?

基本概念足够简单,但我似乎无法找到任何地方如何公开一个对象的属性的示例,该对象的属性是不同类型的对象的集合。

例如,如果我有一个“部门”对象我想有一个“雇员”属性是“员工”对象的集合。

我来自.Net背景,所以我可能会在这里完全错误的心态,但如果我是我想学习正确的方法来解决这个问题。

该概念是否仍然适用于javascript,javascript对象的属性可以是另一种类型的对象的集合吗?集合的概念是否存在(我希望能够通过集合来枚举)还是应该用数组或其他方式来思考?

下面是一些伪代码,应说明是我的目标为:

function Department (Name) 
{ 
    this.DepartmentName=Name; 
    this.Employees = null; // How do I initialise a property to be a collection of Employee objects? 
    } 

function Employee(FirstName, Surname) 
{ 
    this.EmployeeName = Firstname + ' ' + Surname; 
} 

Department.prototype.addEmployee = function (Firstname, Surname) 
{ 
    //In here I want to create an Employee object and add it to an 
    //'Employees' property of the department object 
} 

回答

5

没有在JavaScript中没有真正的“特定类型的对象名单”。你似乎只想要一个数组,这是一个“集合”(基本上是一个对象),数字键和值可以是一切(JavaScript是动态的,所以没有简单的方法来强制集合只包含一种类型,但你应该永远不需要反正):

function Department (Name) 
{ 
    this.DepartmentName = Name; 
    this.Employees = []; // empty array 
} 

然后在原型功能,您可以:

  1. 创建类型的新实例(对象)Employee
  2. 将其添加到this.Employees

像:

Department.prototype.addEmployee = function (Firstname, Surname) 
{ 
    // adds to the end of the array 
    this.Employees.push(new Employee(Firstname, Surname)); 
}; 

您可以访问像this.Employees[0]Employee对象等

不要在原型函数结束忘了分号。这是一个函数表达式,最好用分号终止函数表达式。 功能声明(如DepartmentEmployee),另一方面,不需要那些。区别在于原型函数在赋值语句中用作表达式。

此外,CapitalCase通常用于构造函数(Employee);常规变量名称通常是camelCase中的名称。

+0

感谢pimvdb,填补了我完美地挣扎着的空白。我认为你只是循环遍历数组的索引然后通过索引循环访问? – Mordy

+0

@Mordy:是的,JavaScript的''for'循环与其他大多数语言一样 - 对于一个数组通常'for(var i = 0; i pimvdb

+0

非常好。感谢您的帮助:) – Mordy

相关问题