给出一个简单的类
class Foo {
constructor(x) {
if (!(this instanceof Foo)) return new Foo(x);
this.x = x;
}
hello() {
return `hello ${this.x}`;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在没有new关键字的情况下调用类构造函数?
用法应该允许
(new Foo("world")).hello(); // "hello world"
Run Code Online (Sandbox Code Playgroud)
要么
Foo("world").hello(); // "hello world"
Run Code Online (Sandbox Code Playgroud)
但后者失败了
Cannot call a class as a function
Run Code Online (Sandbox Code Playgroud) 以下代码将在ES5中创建工厂函数:
function MyClass(val) {
if (!(this instanceof MyClass)) {
return new MyClass(val);
}
this.val = val;
}
Run Code Online (Sandbox Code Playgroud)
可以使用或不使用new关键字调用此函数:
var a = new MyClass(5);
var b = MyClass(5);
Run Code Online (Sandbox Code Playgroud)
这在Typescript中运行良好,但我无法弄清楚如何使用描述两种行为的合并来创建声明文件.有没有办法做到这一点?
TypeScript是包含类型的ES6 Javascript的超集.可以使用class关键字声明一个类,并使用关键字实例化new它们,就像它们在Java中一样.
我想知道在TypeScript中是否有任何用例可以在不使用new关键字的情况下实例化类.
我问的原因是因为我想知道是否假设我有一个被调用的类Bob,我可以假设任何实例都Bob被实例化了new Bob().