TypeScript中的类


这次我们接着说TypeScript中的类的定义

类是面向对象开发的一个标志,Js作为一门面向对象的开发语言,从Es6开始也支持了class关键字进行类的定义,而Ts作为Js的超集,也是一门静态的开发语言,其对于类的定义和使用也是必不可少的。现在我们先来简单的看下Ts中类的定义:

// 这里我们以定义一个学生类为例
class Student{
	constructor(name: string, age: number){
		this.name = name;
		this.age = age;
	}
}

上面的代码中我们定义了一个学生类,其constructor为该类的一个构造函数,它会在类实例化的时候自动的进行调用来初始化对象的一些属性值,这其实和Java这样的中类的定义是相似的。
同样,在Ts中类的定义也有如Java中类定义的访问限定符:

1. public: 允许类的属性和方法可以在类的内外被调用,默认的属性和方法的访问限定符均是public
2. private: 允许类的属性和方法可以在类内被调用,在类外被调用
3. protected: 允许类的属性和方法可以在类内和类的继承类中被调用,在类外不允许被调用

对于在类的构造函数中初始化类对象的属性和方法可以简写为如下形式: (这里我以上面创建的学生类为例进行简写)

class Student {
	constructor(public name: string, public age: number){
		// do something
	}
}

以上当类实例化的时候,会将实例传递进来的值自动的赋值给name和age属性


类的继承: 面向对象的三大特性(封装性,继承性,多态性)
在TS中类同样是可以进行继承的,Ts中使用extends关键字进行类的继承,继承关系的子类将获得父类中定义的属性和方法,如下示例:

class Person{
	constructor(public name: string){}
}

// worker类继承Person类
class Worker extends Person{
	constructor(public num: string, name: string){
		super(name)
	}
}

这里子类中可以使用的super关键字,是一个指向父类的指针,当我们在子类中需要调用父类的一些方法属性时可以使用这个关键字


Ts类中的Getter和Setter:
面向对象的封装性要求中,常需要我们对类的一些属性进行封装,避免外部直接操作属性,经常使用两个方法进行处理,Getter方法用于获取属性的值,Setter方法用户设置属性的值。在Ts中可以使用get和set关键字来定义这两个方法。示例:

class Student{
	private _name;
	constructor(name: string){
		this._name = name;
	}
	get name(){
		return this._name;
	}
	set name(name: string){
		this._name = name;
	}
}

// 此时实例对象我们可以这样对name属性进行处理
let obj = new Student("chen")
obj.name = "zhang"

抽象类: TS中和Java这样的语言一样也是有抽象类的概念的,简单理解可以将它理解为一个模板类,其中可以定义一些未实现的方法,然后通过继承让其子类来实现这个 方法。示例:

abstract class Gemo{
	getArea(...rest: number[]):number;
	// 当方法接收的参数个数为未知时,可以使用...运算符,可以接收未知个数的参数,后面只需要跟上参数的类型即可,请示...运算符只能位于已知参数的后面
}
//定义一个矩形类实现Gemo类
class Rect extends Gemo{
	getArea(width: number, height: number){
     	return width * height
    }
}

抽象类的注意事项:

  1. 抽象类使用abstract关键字进行定义
  2. 抽象类不允许被实例化为对象
  3. 抽象类中也可以含有自己的属性和方法
  4. 继承抽象类的类必须实现抽象类中定义的抽象方法,若继承类也是抽象类,则抽象函数还可以被传递

抽象类和接口(interface):
抽象类和接口都是对一部分有共性的内容进行抽象封装,同样对于interface接口之间也是可以实现继承的


最后,我们这里使用Ts中的类为大家书写一个单例模式的类,让大家感受一下Ts中类的书写:

// 定义一个实现单例模式的Demo类
class Demo {
	// 使用private static定义该类的一个唯一实例
	private static instance: Demo;
	// 使用private指定constructor构造函数,使得Demo类不可以被实例化
	private constructor(private name:string){}
	// 导出一个外部获取类实例的方法:
	public static getInstance(){
		if(!this.instance){
			this.instance = new Demo("haha")
		}
		return this.instance
	}
}

// 测试:
const demo1 = Demo.getInstance()
const demo2 = Demo.getInstance()
console.log(demo1 === demo2) // true

这里我们使用到了一个新的关键字: static
static关键字: ts中static 指定的关键字表示的是直接将一个方法或者属性直接挂载到类上,
而不是类的实例上(我的理解),同时static定义的变量只能够被初始化一次,一经初始化则不能在被改变


好了,关于Ts中的类的定义我们就说这么多,希望此篇文章对于想要了解Ts中类的相关内容的朋友有帮助。大家 加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值