如何将对象传播到JavaScript中的类属性中

时间:2017-09-18 06:55:04

标签: javascript class spread-syntax

基本上这就是我想要完成的事情。

class Person {
  constructor (obj) {
    this.first = ''
    this.last = ''
    this.age = ''

    if (obj) {
      Object.assign(this, ...obj)
    }
  }
}

const a = new Person()
console.log('Not spreading: ', a)

const b = new Person({ first: 'Alex', last: 'Cory', age: 27 })
console.log('Spreading: ', b)

有没有办法传播像这样的对象来填充一个类?

3 个答案:

答案 0 :(得分:6)

如果您正在使用Object.assign,则不要使用点差表示法;只需删除...



class Person {
  constructor (obj) {
    this.first = ''
    this.last = ''
    this.age = ''

    if (obj) {
      Object.assign(this, obj)     // <============ No ...
    }
  }
}

const a = new Person()
console.log('Not spreading: ', a)

const b = new Person({ first: 'Alex', last: 'Cory', age: 27 })
console.log('Spreading: ', b)
&#13;
&#13;
&#13;

有一个proposal(目前处于第3阶段,很可能在ES2018中,并且受到转发器的广泛支持),它会在对象初始化程序中对象属性传播,但这不适用于您的情况对象已存在的位置。

答案 1 :(得分:3)

您可以使用解构并仅使用您需要的属性。

&#13;
&#13;
class Person {
    constructor ({ first = '', last = '', age = '' } = {}) {
        Object.assign(this, { first, last, age });
    }
}

const a = new Person()
console.log('Not spreading: ', a)

const b = new Person({ first: 'Alex', last: 'Cory', age: 27, foo: 42 })
console.log('Spreading: ', b)
&#13;
&#13;
&#13;

答案 2 :(得分:2)

这是你正在寻找的吗?

&#13;
&#13;
class Person {
  constructor (obj) {
    this.firstName = ''
    this.lastName = ''
    this.age = ''
    if (obj) {
      Object.assign(this, obj)
    }
  }
}

const a = new Person()
console.log('Not spreading: ', a)

const b = new Person({ firstName: 'Alex', lastName: 'Cory', age: 27 })
console.log('Spreading: ', b)
&#13;
&#13;
&#13;