TypeScript 学习笔记 3 - class
类
类就是用来创造对象的东西。
有一些语言创建对象必须先声明一个类,而有的语言则不需要。
类可以让你的程序更加「可预测」。
这个创造出来的对象不会出现一些我不知道的属性,一切都尽在我的掌握。
语法
声明类
声明对象的非函数属性
声明对象的函数属性
使用 constructor
声明类的属性(static)
使用 this 代指当前对象(注意不要以为 this 永远都代指当前对象,JS 的 this 有更多功能,而且默认 this 为 window)
类继承类(extends)
继承要使用 super
修饰符(public,private,和 protected)
public 是默认的,任何地方可见。
protected 只有自己(类)及子类可见。
private 只有自己(类)可见。
访问器
get 和 set
设置后访问指定属性会通过这两个函数。
抽象类
专门当别的类的爸爸的类。
也可以叫做「爸爸类」:专门当别的类的爸爸的类。
也可以叫做「没有写完的类」:只描述有什么方法,并没有完全实现这些方法。
由于这个类没有写完,所以不能创建出对象。(会报错)
abstract 就是抽象的意思。
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log('roaming the earch...');
}
}
高级技巧
由于 TS 的 class 其实就是 JS 里的 class,JS 里的 class 其实就是一个构造函数。
换句话说,类就是一个函数。
同时,函数在 JS 里,是一种对象。
所以类其实是一种对象。
class Greeter {
static standardGreeting = "Hello, there";
greeting: string;
greet() {
if (this.greeting) {
return "Hello, " + this.greeting;
}
else {
return Greeter.standardGreeting;
}
}
}
let greeter1: Greeter;
greeter1 = new Greeter();
console.log(greeter1.greet());
let greeterMaker: typeof Greeter = Greeter; // 注意这句话
greeterMaker.standardGreeting = "Hey there!";
let greeter2: Greeter = new greeterMaker();
console.log(greeter2.greet());
把类当做接口使用
接口是低配版的类。
类是高配版的接口。
class Point {
x: number;
y: number;
}
interface Point3d extends Point {
z: number;
}
let point3d: Point3d = {x: 1, y: 2, z: 3};