【发布时间】:2015-12-29 13:02:57
【问题描述】:
在Classes -> Advanced Techniques 部分http://www.typescriptlang.org/Handbook#classes-advanced-techniques 中遇到示例
class Greeter {
static standardGreeting = "Hello, there";
greeting: string;
greet() {
if (this.greeting) {
return "Hello, " + this.greeting;
}
else {
return Greeter.standardGreeting;
}
}
}
var greeter1: Greeter;
greeter1 = new Greeter();
alert(greeter1.greet());
var greeterMaker: typeof Greeter = Greeter;
greeterMaker.standardGreeting = "Hey there!";
var greeter2:Greeter = new greeterMaker();
alert(greeter2.greet());
及解释:
接下来,我们直接使用类。在这里,我们创建了一个名为“greeterMaker”的新变量。这个变量将保存类本身,或者说它的构造函数。这里我们使用'typeof Greeter',即“给我 Greeter 类本身的类型”而不是实例类型。或者,更准确地说,“给我一个叫做 Greeter 的符号的类型”,也就是构造函数的类型。此类型将包含 Greeter 的所有静态成员以及创建 Greeter 类实例的构造函数。我们通过在 'greeterMaker' 上使用 'new' 来展示这一点,创建 'Greeter' 的新实例并像以前一样调用它们。
我的问题:引入greeterMaker变量的目的是什么?最终,它只包含对 Greeter 类的引用。
我们可以在下面写代码,
Greeter.standardGreeting = "Hey there!";
var greeter2:Greeter = new Greeter();
alert(greeter2.greet());
收到相同的结果,不要把自己与奇怪的外观混淆
var greeterMaker: typeof Greeter = Greeter;
我在这里遗漏了什么吗?
构造var maker: typeof Foo = Foo;真的有用吗?
【问题讨论】:
标签: typescript