javascript对象可以有一个属性,它是另一种对象的集合吗?

Mor*_*rdy 3 javascript collections properties object

我决定(无论是勇敢还是愚蠢还有待观察)决定增加我的javascript技能,而不是使用警报,我一直在寻找使用javascript业务对象,希望创建一个有用的对象库,然后我可以操作进一步使用JSON或XML.

基本概念很简单,但我似乎无法在任何地方找到如何公开作为不同类型对象集合的对象属性的示例.

例如,如果我有一个"部门"对象,我希望有一个"Employees"属性,它是"Employee"对象的集合.

我来自.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
}
Run Code Online (Sandbox Code Playgroud)

pim*_*vdb 5

JavaScript中没有真正的"特定类型的对象列表".你似乎只想要一个数组,它是一个"集合"(基本上是一个对象),带有数字键和值,可以是一切(JavaScript是动态的,因此没有简单的方法来强制集合只包含一种类型的项目,但你永远不需要):

function Department (Name) 
{
    this.DepartmentName = Name;
    this.Employees = []; // empty array
}
Run Code Online (Sandbox Code Playgroud)

然后在原型函数中,您可以:

  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));
};
Run Code Online (Sandbox Code Playgroud)

您可以访问Employee诸如this.Employees[0]等的对象.

不要忘记原型函数末尾的分号.它是一个函数表达式,使用分号终止函数表达式是一种很好的做法.另一方面,函数声明(如for DepartmentEmployee)不需要那些.不同之处在于prototype函数用作赋值语句中的表达式.

而且,CapitalCase通常用于构造函数(Employee); 常规变量名通常是名称camelCase.