Object.create没有运行构造函数

时间:2017-12-11 20:08:09

标签: javascript typescript

我正在尝试在静态方法中创建一个类的实例,我正在使用Object.create(this.prototype)这样做似乎有效,但是,我的属性itemsundefined当我将其记录到控制台。

我有一个名为model的类,它是基础:

export default class model {

  protected items: any = {}

  public constructor(options: ModelSettings) {
    // Do some stuff
    // Does not set the property items before it is compiled
  }

  public static create(options) {
    let t = Object.create(this.prototype) as any
    console.log(t.items)
  }
}

然后我购买了这个类,扩展了模型:

export default class purchases extends model {
  public constructor() {
    super({table: 'purchases'})
  }
}

然后我这样称呼它:

purchases.create({ my: 'options' })

创建purchases实例的创建方法似乎有效,但属性itemsundefined,就像我之前所说的那样。

Object.create()是否未运行构造函数?

3 个答案:

答案 0 :(得分:1)

它不会调用constructor。它只是创建一个没有强类型{}的对象,就像这样

const obj = {}

并将该对象的原型放到给定的原型中。

您可以使用new this()代替Object.create()

请参阅Demo

答案 1 :(得分:1)

它不会调用构造函数,它只设置原型。您需要自己调用

// Set prototype
let t = Object.create(this.prototype) as any;
// Call the constructor , this should point to the constructor
this.apply(this);

正如其他人所提到的,您应该能够执行以下操作并将原型链接起来并调用构造函数。

t = new this(); 

答案 2 :(得分:1)

如果你想构建一些东西,你可能应该使用queue.Queue

new

如果你真的想手动这样做,那就更复杂了:

 let t =  new this;