我正在尝试在静态方法中创建一个类的实例,我正在使用Object.create(this.prototype)
这样做似乎有效,但是,我的属性items
是undefined
当我将其记录到控制台。
我有一个名为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
实例的创建方法似乎有效,但属性items
是undefined
,就像我之前所说的那样。
Object.create()
是否未运行构造函数?
答案 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;