类构造函数用于创建和初始化类的实例。当使用new
运算符调用一个类时,类的构造函数就会被调用。构造函数以constructor
作为函数名。示例如下:
class Circle {
radius: number;
constructor(r: number) {
this.radius = r;
}
}
const c = new Circle(1);
第4行,定义了Circle类的构造函数,它接受一个number类型的参数r
,并使用参数r的值来初始化radius
成员变量。
第9行,使用new
运算符创建类的实例时构造函数就会被调用。
与普通函数相同,在构造函数中也可以定义可选参数、默认值参数和剩余参数。但是构造函数不允许定义返回值类型,因为构造函数的返回值类型永远为类的实例类型。示例如下:
class A {
constructor(a: number = 0, b?: boolean, ...c: string[]) {}
}
class B {
constructor(): object {}
// ~~~~~~~
// 编译错误!不允许指定构造函数的返回值类型
}
在构造函数上也可以使用可访问性修饰符。它描述的是在何处允许使用该类来创建实例对象。
在默认情况下,构造函数是公有的。如果将构造函数设置成私有的,则只允许在类的内部创建该类的对象。例如,下例中Singleton类的构造函数是私有的,因此只允许在Singleton类内部创建该类的实例对象。第15行,在Singleton类外部创建其实例对象时将产生编译错误。示例如下:
class Singleton {
private static instance?: Singleton;
private constructor() {}
static getInstance() {
if (!Singleton.instance) {
// 允许访问
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
new Singleton(); // 编译错误
与函数重载类似,构造函数也支持重载。我们将没有函数体的构造函数声明称为构造函数重载,同时将定义了函数体的构造函数声明称为构造函数实现。构造函数重载可以存在零个或多个,而构造函数实现只能存在一个。示例如下:
class A {
constructor(x: number, y: number);
constructor(s: string);
constructor(xs: number | string, y?: number) {}
}
const a = new A(0, 0);
const b = new A('foo');
酷客网相关文章:
评论前必须登录!
注册