创建一个对象数组,并在Javascript中的while循环中动态实例化它们

时间:2015-03-04 22:24:52

标签: javascript arrays object

我试图在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对象。

2 个答案:

答案 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();

最佳做法是使用大写首字母命名构造函数。这样,它们与其他对象不同,你知道你可以实例化它们。