JS ES6:将参数作为具有解构的对象获取

时间:2016-11-09 16:16:52

标签: javascript ecmascript-6 destructuring

是否可以使用解构将函数的参数作为对象(以便迭代它)?

function({a=1, b=2, c=3}={}) {
  // how to get {a:1, b:2, c:3}?
}

我的目标是在类构造函数中将每个参数绑定到this

没有解构就有可能:

class Test {
  constructor(args) {
    Object.assign(this, args);
  }
}

但我不知道如何简化:

class Test {
  constructor({a=1, b=2, c=3}={}) {
    this.a = a;
    this.b = b;
    this.c = c;
  }
}

let test = new Test();
// test.a = 1 
// test.b = 2 etc.

1 个答案:

答案 0 :(得分:3)

您可以使用对象创建的简写形式执行此操作:

class Test {
  constructor({a=1, b=2, c=3}={}) {
    Object.assign(this, {a, b, c});
  }
}

示例:



class Test {
  constructor({a=1, b=2, c=3}={}) {
    Object.assign(this, {a, b, c});
  }
}
const t1 = new Test();
console.log("t1:", t1.a, t1.b, t1.c);
const t2 = new Test({b: 42});
console.log("t2:", t2.a, t2.b, t2.c);




或者,不要使用解构,并使用多个参数Object.assign



class Test {
  constructor(options = {}) {
    Object.assign(this, Test.defaults, options);
  }
}
Test.defaults = {a: 1, b: 2, c: 3};

// Usage:
const t1 = new Test();
console.log("t1:", t1.a, t1.b, t1.c);
const t2 = new Test({b: 42});
console.log("t2:", t2.a, t2.b, t2.c);




...如果您希望其中的任何内容可以按名称引用,您可以使用this.a(以及this.bthis.c)来执行此操作,或者你可以这样做:

let {a, b, c} = this;

...之后再使用它们。 (请注意分配到结果abc不会更新对象。)