我的代码中有一个构造函数对象:
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();
那么我可以操纵这个对象的实例。现在,我希望使用变量名称动态创建这些对象:employee1
,employee2
,employee3
等等。有没有办法实现这一目标,还是不可能?< / p>
我还有另一个问题,就是说我想同时更改所有实例的age
,有没有办法做到这一点?如果这个问题很愚蠢,我会提前感谢并抱歉,我正在学习!
编辑:这与其他问题不同,因为我使用的是构造函数Object,而不是文字对象,除此之外,我还问另一个问题是如何更改属性在所有情况下同时,谢谢!
答案 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
})