TypeScript类构造函数

类构造函数用于创建和初始化类的实例。当使用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');

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!