在类中创建类的对象,但不使用名称

时间:2018-12-24 14:52:18

标签: javascript typescript

很抱歉,如果标题误导了我,我想不出更好的标题了。

所以我有两个这样的类:

class ClassA{
   getObject(){
      return new this(with some parameters)
   }
}
class ClassB extends classA{

}
let a = new ClassB();
a.getObject();

我知道我总是可以通过一些参数返回新的ClassB()。但是ClassA被扩展了数百个类,并且每个类都会有很多变化。 那么,有没有办法在getObject的{​​{1}}方法中返回自类的对象?

1 个答案:

答案 0 :(得分:0)

您可以使用多态this返回与当前类类型相同的实例:

class ClassA {
    getObject(): this {
        // not really type safe, not really recomnded 
        return new (this as any).constructor()
    }
}
class ClassB extends ClassA {

}
let a = new ClassB();
let b = a.getObject(); // ClassB
console.log(a.getObject() instanceof ClassB); // true

您还可以使用类型参数推断this的类型并将其用作返回类型:

class ClassA {
    getObject<T>(this:T) : T {
        // not really type safe
        return new (this as any).constructor()
    }
}
class ClassB extends ClassA {

}
let a = new ClassB();
let b = a.getObject(); // ClassB
console.log(a.getObject() instanceof ClassB); // true