TypeScript在静态上下文中从类创建新实例

时间:2015-04-16 18:46:18

标签: javascript typescript

TypeScript中是否有办法以通用方式从静态方法创建新实例?

我想做类似的事情:

class Base {
    static getInstance() {
         return new self(); // i need this line :)
    }
}

class Test extends Base {
}

class NextTest extends Base {
}

var test = Test.getInstance();
assert(test instanceof Test).toBe(true);

var nextTest = NextTest.getInstance();
assert(nextTest instanceof NextTest).toBe(true);

如果有人之前做过这样的事情并且可以帮助我,那将会非常有帮助。也许有一种JavaScript方式?

提前致谢。

2 个答案:

答案 0 :(得分:7)

哈克:)

static getInstance() {
     return new this;
}

答案 1 :(得分:-2)

您也可以使用类名本身,在您的示例中 Base

static getInstance() {
   return new Base()
}

下面的另一个例子是在名为 createInstance 的静态函数中使用 Greeter 类名,你可以测试以下例如TypeScript Playground

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }

    static createInstance(message: any) {
        return new Greeter(message);
    }
}

let greeter = Greeter.createInstance("world");

let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function() {
    alert(greeter.greet());
}

document.body.appendChild(button);

希望它有所帮助。