Typescript 中的类有什么功能

JavaScript 中在 ES6 中有了类的概念,这个类是原型的语法糖。
通过 Class 来实现继承

一、类的相关概念

类:

  • 类(Class):定义了一件事物的抽象特点,描述了所创建的对象共同的属性和方法
  • 对象(Object):通过 new 操作符生成的类的实例
  • 面向对象(Object-oriented programming): 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模。其特点包括:封装、继承、多态。

特点:

  • 封装(Encapsulation):封装就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。
  • 继承(Inheritance):继承是使用已存在的类的定义作为基础建立新类。
  • 多态(Polymorphism):多态是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
  • 抽象类(Abstract Class):抽象类是供其他类继承的基类,抽象类不允许被实例化。抽象类中的抽象方法必须在子类中被实现

属性和方法:

  • 构造方法(constructor):构造器作为一种方法,负责类中成员变量(域)的初始化。
  • 存取器(getter & setter):用来改变属性的读取和赋值行为
  • 修饰符(Modifiers):修饰符是一些关键字,用于限定成员或类型的性质。比如 public、private、protect、readOnly 等
  • 接口(Interfaces):不同类之间公有的属性或方法,可以抽象成一个接口。接口可以被类实现(implements)。一个类只能继承自另一个类,但是可以实现多个接口

二、TypeScript 中类的功能

1、实现了类的声明和使用

class Greeter {
	greeting: string;
	constructor(message: string) {
		this.greeting = message;
	}
	greet() {
		return 'Hello, ' + this.greeting;
	}
}

let greeter = new Greeter('world');

2、实现了修饰符、构造函数、静态属性、存取器等相关的功能

class Greeter {
	static age: number;
	public greeting: string;
	constructor(message: string) {
		this.greeting = message;
	}
	private name: string = 'john';
	greet() {
		return 'Hello, ' + this.name + this.greeting;
	}
}

class Employee {
	private _fullName: string;

	get fullName(): string {
		return this._fullName;
	}

	set fullName(newName: string) {
		this._fullName = newName;
	}
}

3、实现了继承

  • 使用 extends 来继承父类的。
  • 派生类包含了一个构造函数,它必须调用 super(),它会执行基类的构造函数。 而且,在构造函数里访问 this 的属性之前,我们 一定要调用 super()。
class Animal {
	name: string;
	constructor(theName: string) {
		this.name = theName;
	}
	move(distanceInMeters: number = 0) {
		console.log(`Animal moved ${distanceInMeters}m.`);
	}
}

class Dog extends Animal {
	bark() {
		console.log('Woof! Woof!');
	}
}
class Snake extends Animal {
	constructor(name: string) {
		super(name);
	}
	move(distanceInMeters = 5) {
		console.log('Slithering...');
		super.move(distanceInMeters);
	}
}

4、实现了抽象类

abstract 用于定义抽象类和其中的抽象方法。

  • 抽象类是不允许被实例化
  • 抽象类中的抽象方法必须被子类实现
abstract class Department {
	constructor(public name: string) {}

	printName(): void {
		console.log('Department name: ' + this.name);
	}

	abstract printMeeting(): void; // 必须在派生类中实现
}

class AccountingDepartment extends Department {
	constructor() {
		super('Accounting and Auditing'); // 在派生类的构造函数中必须调用 super()
	}

	printMeeting(): void {
		console.log('The Accounting Department meets each Monday at 10am.');
	}

	generateReports(): void {
		console.log('Generating accounting reports...');
	}
}

5、把类当做接口使用

类定义会创建两个东西:类的实例类型和一个构造函数。 因为类可以创建出类型,所以能够在允许使用接口的地方使用类。

class Point {
	x: number;
	y: number;
}

interface Point3d extends Point {
	z: number;
}

let point3d: Point3d = { x: 1, y: 2, z: 3 };

6、实现了类实现接口(implements)

实现(implements)是面向对象中的一个重要概念。一般来讲,一个类只能继承自另一个类,有时候不同类之间可以有一些共有的特性,这时候就可以把特性提取成接口(interfaces),用 implements 关键字来实现。

interface ClockInterface {
	currentTime: Date;
	setTime(d: Date);
}

class Clock implements ClockInterface {
	currentTime: Date;
	setTime(d: Date) {
		this.currentTime = d;
	}
	constructor(h: number, m: number) {}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值