参数列表

时间:2016-09-23 12:57:07

标签: javascript class constructor arguments ecmascript-6

我最近见过这段代码:



class Foo {
  constructor({
    a,
    b,
    c = []
  }) {
    this.a = a;
    this.b = b;
    this.c = c;
    console.log(this);
  }
}
const foo = new Foo({
  a: 1,
  b: 2
});




但我从未见过用花括号包装参数名称定义的参数。我的linter抱怨它,但代码工作正常,所以我认为它是有效的,因为它执行没有错误。

我已阅读有关的MDN文档,classconstructordefault arguments。但是,我没有看到这种模式在任何地方描述(也许我错过了它?)。

我在寻找什么,这种模式有名称,还是在某处描述?

2 个答案:

答案 0 :(得分:3)

parameter destructuring

但是,在这种情况下,您可以简单地执行

class Foo {
  constructor(opts) {
    Object.assign(this, {c: []}, opts);
    console.log(this);
  }
}

const foo = new Foo({
  a: 1,
  b: 2
});

你应该找到一些“es6”标志,让你的短片让它快乐。

答案 1 :(得分:1)

  

但我以前从未见过如此定义的论点。

这是解构,只是在争论中使用。

我找不到一个好的参考,但我相信这是一个ES6功能。它的作用是将对象参数分解为单个变量,并将具有相同名称的属性值分配给变量。

这类似于:

class Foo {
  constructor(obj) {
    this.a = obj.a;
    this.b = obj.b;
    this.c = obj.c || [];
    console.log(this);
  }
}