javascript对象是否可以具有另一种类型对象的集合属性?
我已经决定(不管是勇敢还是愚蠢还有待观察)提高我的javascript技能,而不仅仅是使用警报,我已经做到了 我一直在考虑使用javascript业务对象,希望创建一个有用的对象库,然后可以使用JSON或XML进行操作 再往下走 基本概念非常简单,但我似乎在任何地方都找不到一个示例,说明如何公开一个对象的属性,该对象是 不同类型的对象 例如,如果我有一个“部门”对象,我希望有一个“雇员”属性,它是“雇员”对象的集合 我有.Net的背景,所以我在这里可能会有完全错误的想法,但如果我是,我想学习正确的方法来处理这个问题 这个概念是否仍然适用于javascript,javascript对象的属性是否可以是其他类型对象的集合?集合的概念是否存在(我也希望能够枚举整个集合),或者我应该考虑数组还是其他方面 下面是一些伪代码,可以说明我的目标:javascript对象是否可以具有另一种类型对象的集合属性?,javascript,object,collections,properties,Javascript,Object,Collections,Properties,我已经决定(不管是勇敢还是愚蠢还有待观察)提高我的javascript技能,而不仅仅是使用警报,我已经做到了 我一直在考虑使用javascript业务对象,希望创建一个有用的对象库,然后可以使用JSON或XML进行操作 再往下走 基本概念非常简单,但我似乎在任何地方都找不到一个示例,说明如何公开一个对象的属性,该对象是 不同类型的对象 例如,如果我有一个“部门”对象,我希望有一个“雇员”属性,它是“雇员”对象的集合 我有.Net的背景,所以我在这里可能会有完全错误的想法,但如果我是,我想学习正确
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是动态的,因此没有简单的方法强制集合只包含一种类型的项,但无论如何都不需要):
然后在prototype函数中,您可以:
Employee
this.Employees
Employee
对象,如this.Employees[0]
等
不要忘记原型函数末尾的分号。这是一个函数表达式,最好用分号终止函数表达式。另一方面,职能声明(如部门和员工)不需要这些声明。区别在于原型函数在赋值语句中用作表达式
此外,
CapitalCase
通常用于施工人员(Employee
);正则变量名通常是camelCase
中的名称,感谢pimvdb,它填补了我一直在努力解决的空白。我想你只是通过索引循环遍历数组来遍历员工?@Mordy:是的,JavaScript的for
循环与大多数其他语言一样-对于数组,通常for(var I=0;I
。非常好。感谢您的帮助:)表达式应以分号结尾的说法不正确。许多表达式(例如分组运算符中的表达式)和某些语句(例如块语句)不需要以分号结尾。分号插入的规则不能简单概括,尽管它们通常在语句(但不是所有语句)之后需要。参见ECMA-262第7.9节。@RobG:你说得对,当前的措辞不正确。我的意思是描述函数表达式和声明之间的区别。
function Department (Name)
{
this.DepartmentName = Name;
this.Employees = []; // empty array
}
Department.prototype.addEmployee = function (Firstname, Surname)
{
// adds to the end of the array
this.Employees.push(new Employee(Firstname, Surname));
};