学习TypeScrip8(Class类)

ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

  • 定义类
//定义类
class Person {
	constructor() {}
	run() {}
}

一、TS 是如何定义类?

  • 在TypeScript是不允许直接在constructor 定义变量的

在这里插入图片描述

  • 需要在constructor上面先声明

在这里插入图片描述

  • 这样引发了第二个问题,如果了定义了变量不用,也会报错,通常是给个默认值或者进行赋值

在这里插入图片描述

  • 恭喜你已经学会了在class中 如何定义变量

在这里插入图片描述

二、类的修饰符

总共有三个 public private protected

  • 使用public 修饰符 可以让你定义的变量 内部访问 也可以外部访问 如果不写默认就是public
  • 使用 private 修饰符 代表定义的变量私有的只能在内部访问 不能在外部访问
  • 使用 protected 修饰符 代表定义的变量私有的只能在内部和继承的子类中访问 不能在外部访问
class Person {
	public name: string;
	private age: number;
	protected some: any;
	constructor(name: string, ages: number, some: any) {
		this.name = name;
		this.age = ages;
		this.some = some;
	}
	run() {}
}

class Man extends Person {
	constructor() {
		super('张三', 18, 1);
		console.log(this.some);
	}
	create() {
		console.log(this.some);
	}
}
let xiaoman = new Person('李四', 18, 1);
let man = new Man();
man.some;

三、static 静态属性 和 静态方法

  • 我们用static 定义的属性,不可以通过this去访问

在这里插入图片描述

  • 只能通过类名去调用

在这里插入图片描述

  • static 静态函数,同样也是不能通过this去调用,也是通过类名去调用

在这里插入图片描述

  • 需注意: 如果两个函数都是static静态的,是可以通过this互相调用

在这里插入图片描述

四、interface定义类

ts interface 定义类 使用关键字 implements 后面跟interface的名字多个用逗号隔开,继承还是用extends

interface PersonClass {
	get(type: boolean): boolean;
}

interface PersonClass2 {
	set(): void;
	asd: string;
}

class A {
	name: string;
	constructor() {
		this.name = '123';
	}
}

class Person extends A implements PersonClass, PersonClass2 {
	asd: string;
	constructor() {
		super();
		this.asd = '123';
	}
	get(type: boolean) {
		return type;
	}
	set() {}
}

五、抽象类

应用场景: 如果你写的类实例化之后毫无用处此时我可以把他定义为抽象类,或者你也可以把他作为一个基类-> 通过继承一个派生类去实现基类的一些方法

5.1. 例子1

下面这段代码会报错抽象类无法被实例化

abstract class A {
	public name: string;
}

new A();

5.2. 例子2

我们在A类定义了 getName 抽象方法但为实现
我们B类实现了A定义的抽象方法 如不实现就不报错 我们定义的抽象方法必须在派生类实现

abstract class A {
	name: string;
	constructor(name: string) {
		this.name = name;
	}
	print(): string {
		return this.name;
	}

	abstract getName(): string;
}

class B extends A {
	constructor() {
		super('张三');
	}
	getName(): string {
		return this.name;
	}
}

let b = new B();

console.log(b.getName());

学习TypeScrip9(元组类型)

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值