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

Can a javascript object have a property which is a collection of another type of object?

本文关键字:对象 类型 集合 另一种 属性 javascript 有一个 一个      更新时间:2023-09-26

我已经决定(是勇敢还是愚蠢还有待观察)决定提高我的javascript技能,而不仅仅是使用警报一直在考虑使用javascript业务对象,希望创建一个有用的对象库,然后我可以用JSON或XML操作

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

例如,如果我有一个"Department"对象,我希望有一个"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
}

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

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

那么在原型函数中,你可以:

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

:

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

您可以访问Employee对象,如this.Employees[0]

不要忘记原型函数末尾的分号。这是一个函数表达式,用分号结束函数表达式是很好的做法。另一方面,函数声明(如DepartmentEmployee)不需要这些。不同之处在于原型函数被用作赋值语句中的表达式。

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