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

时间:2011-11-29 11:57:27

标签: javascript object collections properties

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

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

例如,如果我有一个"部门"对象我想有一个"员工"属于"员工的集合"对象。

我来自.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
}

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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

    您可以访问Employeethis.Employees[0]对象。

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

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