有没有办法让构造函数赋值更简洁(和简单)?

时间:2016-10-25 14:59:25

标签: javascript ecmascript-6

我今天正在搞乱ES6语法,并组成了这个基本的测试类:

class Animal {
  constructor(type, age, name = "Unnamed Animal") {
    this.type = type;
    this.age = age;
    this.name = name;
  }
  talkToMe() {
    console.log(`Hi, my name is ${this.name}, and I am a ${this.type}!`);
  }
}

有没有办法使用新的ES6语法使构造函数更简洁?也许是某种东西,比如

constructor(type, age, name = "Unnamed Animal") {
    this = {type, name, age};
}

3 个答案:

答案 0 :(得分:3)

我打算说"不"因为我非常肯定你的代码很简单,但我记得Object.assign并且能够使用object constructor shorthand syntax

如果您要设置 lot 属性,可以将它们全部分配为:

constructor(type, age, name = "Unnamed Animal") {
  Object.assign(this, {
    type,
    age,
    name
  });
}

这个 会受到性能影响,我认为就可读性而言,它是平等的,但如果键入this.prop = prop对你很烦,那么< em>是的替代品。

就个人而言,我坚持:

this.name = name;
this.age = age;
this.type = type;

答案 1 :(得分:2)

您可以使用Object.assign一次完成所有三项作业:

constructor(type, age, name = "Unnamed Animal") {
    Object.assign( this, { type, name, age } );
}

答案 2 :(得分:1)

是的,您可以使用Object.assign

class Animal {
  constructor(type, age, name = "Unnamed Animal") {
    Object.assign(this, {type, name, age});
  }
  talkToMe() {
    console.log(`Hi, my name is ${this.name}, and I am a ${this.type}!`);
  }
}
new Animal('elephant', '5', 'Dumbo').talkToMe();

proposal允许类似

的内容
this .= {type, name, age};