ECMAScript 6中较短的类初始化

tro*_*orl 11 javascript ecmascript-6 babeljs

每次我创建一个类,我都需要做同样的无聊过程:

class Something {
  constructor(param1, param2, param3, ...) {
    this.param1 = param1;
    this.param2 = param2;
    this.param3 = param3;
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让它更优雅,更短?我使用Babel,因此允许使用一些ES7实验功能.也许装饰者可以帮忙吗?

T.J*_*der 10

你可以使用Object.assign:

class Something {
  constructor(param1, param2, param3) {
    Object.assign(this, {param1, param2, param3});
  }
}
Run Code Online (Sandbox Code Playgroud)

它是一个ES2015(又名ES6)功能,它将一个或多个源对象的自己的可枚举属性分配给目标对象.

当然,你必须两次编写arg名称,但至少它要短得多,如果你把它作为你的习语,那么当你想要在实例上有你想要的参数时,它会很好地处理它,例如你没有,例如:

class Something {
  constructor(param1, param2, param3) {
    Object.assign(this, {param1, param3});
    // ...do something with param2, since we're not keeping it as a property...
  }
}
Run Code Online (Sandbox Code Playgroud)

示例:( Babel的REPL上的实时副本):

class Something {
  constructor(param1, param2, param3) {
    Object.assign(this, {param1, param2, param3});
  }
}
let s = new Something('a', 'b', 'c');
console.log(s.param1);
console.log(s.param2);
console.log(s.param3);
Run Code Online (Sandbox Code Playgroud)

输出:

a
b
c