假设我有一个包含5个人名字的列表
let listNames = [Sam, Ash, Moe, Billy, Kenzi]
我希望每个名称都使用类
具有doneHomeWork
和lazy
的属性
class Person {
constructor() {
this.doneHomeWork = 0
this.lazy = false
}
}
而不是像这样分配每个名字:
const Sam = new Person()
const Ash = new Person()
const Moe = new Person()
const Billy = new Person()
const Kenzi = new Person()
我在考虑这样做
listNames.forEach(name => {
name = new Person()
})
然而,在我的ESLint中,它给了我一个错误
赋值函数参数'name'no-param-reassign
这似乎微不足道,但由于某种原因,我无法重新考虑这一点。
答案 0 :(得分:2)
问题是name变量是用于在循环内循环的变量。
您将在循环的第一次迭代中更改此值。这就是您的错误Assignment to function parameter 'name' no-param-reassign
的原因。
然后,您尝试使用动态名称作为变量名称。如果你想这样做,方法是使用括号表示法,所以你可以这样做:
class Person {
constructor() {
this.doneHomeWork = 0
this.lazy = false
}
}
let persons = [];
let listNames = ['Sam', 'Ash', 'Moe', 'Billy', 'Kenzi'];
correctListNames.forEach(name => {
persons[name] = new Person()
})
console.log(persons);
答案 1 :(得分:2)
您可以使用ES6数组解构并为每个名称分配Person类的新实例。
class Person {
constructor() {
this.doneHomeWork = 0;
this.lazy = false;
}
}
const [Sam, Ash, Moe, Billy, Kenzi] = Array.from(Array(5), e => new Person)
console.log(Sam)
console.log(Ash)

答案 2 :(得分:1)
而不是尝试动态生成此
const Sam = new Person();
const Randy = new Person():
你可以通过这样的方式获得类似的东西,
const persons = {
Sam: new Person(),
Randy: new Person(),
};
然后,您可以使用persons['Sam']
或persons.Sam
访问它们。
现在从数组中实现这个目的,
const arr = ['Sam', 'Randy'];
const persons = {};
arr.forEach(name => {
persons[name] = new Person();
});
至于你得到的eslint警告是因为你试图改变一个函数参数的值。您可以通过在eslint配置文件中将规则设置为0来关闭。但是我建议不要关闭。
答案 3 :(得分:0)
您可以使用ES6解构功能来实现此目的:
class Person {
constructor() {
this.doneHomeWork = 0
this.lazy = false
}
}
let arr = [];
for(let i=0;i<6;i++) {
arr.push(new Person());
}
const [Sam, Ash, Moe, Billy, Kenzi] = [...arr];
console.log(Sam);
&#13;