如何用内部对象构造对象

时间:2016-05-18 20:22:04

标签: javascript class ecmascript-6

我正在尝试使用MongoDB数据库的输出构造一个类的实例。我的问题在于我的类有嵌套类,我也想实例化。使用Object.assign()似乎只创建一个顶级对象,而内部属性仍然是“对象”,所以我无法访问他们的方法。例如

let obj = {address: { street: '1234 Rainbow Road' }};

class Person {
  constructor(obj) {
    Object.assign(this, obj);
  }
}

class Address {
  constructor(addr) {
    this.address = addr;
  }

  printAddress() {
    console.log(this.address);
  }
}

let p = new Person(obj);
p.address.printAddress() // fails, no function printAddress

与...相比。

class Person {
  constructor(obj) {
    this.address = new Address(obj.address);
  }
}

class Address {
  constructor(addr) {
    this.address = addr;
  }

  printAddress() {
    console.log(this.address);
  }
}

let p = new Person(obj);
p.address.printAddress() // works

这只是一个例子,我的类相当大,有没有办法简化实例化所有内部类?或者我是否必须像在第二个代码片段中那样对其进行分解?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在new Address

的参数列表中调用new Person
let p = new Person(new Address({street: '1234 Rainbow Road'}));

答案 1 :(得分:0)

第二个版本足以作为单个属性的设计选择。

对于成熟的DI容器来说,它看起来并不像,但如果属性的数量足够大,某种类映射可能有助于消除样板代码。

y = x[1];