ES6类 - 映射变量数组

时间:2017-05-02 18:26:51

标签: javascript arrays oop es6-class

假设我有一个包含5个人名字的列表

let listNames = [Sam, Ash, Moe, Billy, Kenzi]

我希望每个名称都使用类

具有doneHomeWorklazy的属性
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

这似乎微不足道,但由于某种原因,我无法重新考虑这一点。

4 个答案:

答案 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;
&#13;
&#13;