类的声明
在使用类之前,需要先声明类的结构,再基于此结构创建该类的一个或多个实例对象。
基本声明语法
TypeScript 使用 class
关键字来声明类,基本声明语法如下。
class 类名 {
//属性
属性名称1: 属性类型;
属性名称2: 属性类型;
...
//构造函数
constructor(参数列表...) {
//构造实例对象时的初始化代码
}
//方法
方法名称1(参数列表...): 返回值类型 {
//方法代码块
}
方法名称2(参数列表...): 返回值类型 {
//方法代码块
}
...
}
类的声明示例如下。
class Person {
name: string;
age: number;
constructor(initName: string, initAge: number) {
this.name = initName;
this.age = initAge;
}
introduction(): void {
console.log(`My name is ${this.name}, I'm ${this.age} years old.`)
}
}
代码声明了一个 Person
类,它拥有一个 string
类型的 name
属性和一个 number
类型的 age
属性,并且拥有一个 introduction()
方法,用于输出简短的自我介绍。同时,类中指定了构造函数,它拥有 initName
和 initAge
两个参数。当调用构造函数时,会将这两个参数值分别赋给新对象的 name
属性和 age
属性。
创建实例对象
类是对象的模板,并不是实际对象。只有实例化该类,才能产生以该类为模板的新对象。实例化时会调用类的构造函数来产生新对象。在 TypeScript 中,使用 new
关键字来实例化新的对象,语法如下。
let 对象名称 = new 类名(构造函数的参数...);
构造函数用于描述如何构造实例对象。当使用 “new类名(构造函数的参数…)” 语句时,会调用该类的构造函数来实例化新对象。
以前面声明的 Person
类为例,Person
类拥有一个构造函数,该函数拥有两个参数(initName
和 initAge
)。在向构造函数传递具体参数值之后,构造函数会产生一个新的对象,并将这两个参数值分别赋给新对象的 name
属性和 age
属性,然后返回这个新的对象。Person
类实例化对象的示例代码如下。
let person1: Person = new Person("Rick", 24);
//以下代码输出My name is Rick, I'm 24 years old.
person1.introduction();
let person2: Person = new Person("Shark", 31);
//以下代码输出My name is Shark, I'm 31 years old.
person2.introduction();
一个类只支持一个构造函数。如果构造实例对象时不需要特殊处理,也可以不用编写构造函数,TypeScript 会自动生成一个无参数且函数体为空的构造函数,用于实例化该类。
例如,对于以下类,没有编写构造函数,但由于 TypeScript 会默认生成一个无参数构造函数,因此也可以用它实例化新对象。
class Animal {
type: string;
}
let animal1: Animal = new Animal();
animal1.type = "primate"
声明类时,类的作用域不会提升到当前作用域的顶端,因此无法在类的声明语句出现之前就使用,否则会引起编译错误,示例代码如下。 |
//编译错误:类"Animal"用于其声明前。ts(2449)
let animal1: Animal = new Animal();
class Animal {
type: string;
}