我试图在Javascript中为作业创建一个对象数组,但以下似乎无法正常工作
var employee = {
employeeId: "",
hoursWorked: 0,
overtimeWorked: 0,
wage: 15
};
var employees = [];
var p = 0;
var i = 0;
while(p != -1){
p = prompt("please enter employee id#")
employees[i] = new employee();
employees[i].employeeId = p;
i++
}
我已经通过并评论调试了我的代码,问题似乎是
employees[i] = new employee();
无论我是在循环外,还是在数组中的任何元素中执行此操作,我似乎都无法将数组的任何元素实例化为employee对象。
答案 0 :(得分:4)
您只能将new
与构造函数一起使用。因此,您需要将employee
变量更改为构造函数。
function Employee() {
this.employeeId = "";
this.hoursWorked = 0;
this.overtimeWorked = 0;
this.wage = 15;
};
然后,你可以这样做:
employees[i] = new Employee();
每次获取一个新的员工对象。
在您的具体情况下,我建议允许构造函数也进行参数并修复您的while
循环以适当地处理用户提示的取消:
function Employee(id) {
this.employeeId = id;
this.hoursWorked = 0;
this.overtimeWorked = 0;
this.wage = 15;
};
var employees = [];
var p = 0;
while (true) {
p = prompt("please enter employee id#");
if (!p) {
break;
}
employees.push(new Employee(p));
};
工作演示:http://jsfiddle.net/jfriend00/zk7bdfrv/
仅供参考,您的while循环也存在缺陷,因为prompt()
在取消时返回null
,而不是-1
并且您使用的是null
值。
答案 1 :(得分:0)
将employee
定义如下:
function Employee() {
this.employeeId = "";
this.hoursWorked = 0;
this.overtimeWorked = 0;
this.wage = 15;
};
然后实例化为:
new Employee();
最佳做法是使用大写首字母命名构造函数。这样,它们与其他对象不同,你知道你可以实例化它们。