如何在Javascript中创建多个对象实例

时间:2016-04-13 01:12:34

标签: javascript object instance

我的代码中有一个构造函数对象:

function Employee(){
    this.name = names[Math.floor(Math.random() * names.length)];
    this.age=1;
    this.level=1;
    this.production=400;
    this.totalprod=0;
}

所以,当我创建一个新的员工时,我只想说:

var employee1 = new Employee();

那么我可以操纵这个对象的实例。现在,我希望使用变量名称动态创建这些对象:employee1employee2employee3等等。有没有办法实现这一目标,还是不可能?< / p>

我还有另一个问题,就是说我想同时更改所有实例的age,有没有办法做到这一点?如果这个问题很愚蠢,我会提前感谢并抱歉,我正在学习!

编辑:这与其他问题不同,因为我使用的是构造函数Object,而不是文字对象,除此之外,我还问另一个问题是如何更改属性在所有情况下同时,谢谢!

2 个答案:

答案 0 :(得分:3)

这是一种方法,使用数组,我们将新的Employees推送到它,并返回该数组:

要添加特定值,在这种情况下,我建议将其作为参数传递给您的Employee构造函数,如果您愿意,可以使用所有这些参数执行此操作:

请注意,在JsBin中,所有年龄段都不同,它们实际上是n的值:

工作示例:JSBin

    function Employee(age){
    this.name = 'something';
    this.age= age;
    this.level=1;
    this.production=400;
    this.totalprod=0;
}


function maker(n) {
  var arr = [];
  while (n > 0) {
    arr.push(new Employee(n));
    n--;
  }
  return arr;
}

答案 1 :(得分:2)

如果不使用像eval这样的东西,这是不可能的,这是不好的做法。

相反,如果你知道你想提前做多少员工,你可以做这样的事情。

示例:https://jsfiddle.net/dbyw7p9x/

function makeEmployees(n) {
  var employees = new Array(n)
  for (var i = 0; i < n; ++i) {
    employees[i] = new Employee()
  }
  return employees
}

或者你也可以使它返回一个有趣的对象,虽然与数组不完全相同,但是可以像使用方括号obj[0], obj[1], obj[2], obj[3]中的数字等的数组一样进行访问。

function makeEmployeesObj(n) {
  var employees = {}
  for (var i = 0; i < n; ++i) {
    employees[i] = new Employee()
  }
  return employees
}

要更改每种方法的属性,您可以执行以下操作:

// Array
for (var i = 0; i < e1.length; ++i) {
    e1[i].age = 2
}

// Object
Object.keys(e2).forEach(function(key) {
    e2[key].age = 2
})