1、类的基本使用

类描述了所创建的对象共同的属性和方法

Typrscript支持面向对象所有特征,比如类、接口等。

Typrscript类定义方法如下:

class class_name{
//类作用域
}

定义类的关键字为class,后面紧跟类名,类可以包含以下机个模块(类的数掘成员):

字段–字段是类里面声明的变量。字段表示对象的有关数据。

构造函数–类实例化时调用,可以为类的对象分配内存。

方法–方法为对象要执行的揉作。

代码演示:

export default {}
​
// 类的基本使用
class Person {// 字段(属性)name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}
​//函数(方法)sayHello(): void {console.log(`我是来自狗熊岭的${this.name},我今年${this.age}岁了!!!`);}
}
// 实例化类
let p0 = new Person("熊二", 18)
p0.sayHello()

2、类的继承

TypeScript支持继承类,即我们可以在创建类的时候继承一个已存在的类,这个已存在的类称为父类,继承它的类称为子类。

类继承使用关键字extends,子类除了不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承。 TypeScript一次只能继承一个类,不支持继承多个类,但TypeScript支持多重继承(A继承B,B继承C)。

语法格式如下:

c1ass child_c1ass_name extends parent_class_name

代码演示:

export default {}
​
// 类的继承
class Person {// 字段(属性)name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}
​//函数(方法)sayHello(): void {console.log(`我是来自狗熊岭的${this.name},我今年${this.age}岁了!!!`);}
}
// 实例化类
let p0 = new Person("熊二", 18)
p0.sayHello()
​
class Student extends Person {score: string;constructor(name: string, age: number, score: string) {// 调用父类中的构造函数super(name, age);this.score = score;}sayHello(): void {// 调用父类中的构造函数super.sayHello();// 重写的父类方法console.log(`我是重写的方法,我是来自狗熊岭的${this.name},我今年${this.age}岁了,我的成绩是${this.score}。`)}
}
let p1 = new Student("光头强",18,"C")
p1.sayHello();

3 、static与instanceof

slatic关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。

instanceof运算符用于判断对象是否是指定的类型,如果是返回true,否则返回false。

代码演示:

export default {}
​
​
// slatic关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。
class StaticTest {static salary: number;static say(): void {console.log(`我们想要的工资是${StaticTest.salary}k`);}
}
StaticTest.salary = 100;
StaticTest.say();
​
​
// instanceof运算符用于判断对象是否是指定的类型,如果是返回true,否则返回false。
class Person {};
​
let p0 = new Person();
let isPerson = p0 instanceof Person;
console.log("p0对象是Person实例化出来的吗?",isPerson);//true
​
class Student extends Person{};
​
let p1 = new Student();
let isStudent = p1 instanceof Student;
console.log("p1对象是Person实例化出来的吗?",isStudent);//true

4、类中的修饰符

public(默认):公有,可以在任何地方被访问,

protected:受保护,可以被其自身以及其子类访问,

private:私有,只能被其定义所在的类访问。

readonly:可以使用readonly关键字将属性设置为只读的。只读属性必须在声明时或构造函数里被初始化。

代码演示:

export default {}
​
class Person {public name: string;//公有属性protected age: number;//受保护private sex: string;//私有属性
​say(): void {console.log(`我的名字是${this.name},性别${this.sex},今年${this.age}岁了}`);}
}
​
class Student extends Person {score: string;constructor(name: string, age: number, sex: string, score: string) {super();this.name = name;this.score = this.score;}say(): void {console.log(this.name);console.log(this.age);// console.log(this.sex);//属性"sex”为私有属性,只能在类"Person”中访问。console.log(this.score);
​}
}
​
//readonly:可以使用readonly关键字将属性设置为只读的。只读属性必须在声明时或构造函数里被初始化。
​
class Print {readonly str1: string = "我是声名时赋值的";readonly str2: string;readonly str3: string;readonly str4: string;readonly str5: string;
​constructor( str2: string, str3: string, str4: string, str5: string) {this.str2 = str2;this.str3 = str3;this.str4 = str4;this.str5 = str5;}say() {console.log(this.str1,this.str2, this.str3, this.str4, this.str5);}
}
let p0 = new Print( '喜洋洋', '懒洋洋', '沸羊羊', '美洋洋');
p0.say();
​

5、 getter与setter

官方的另外一个名字:存取器 通过getters/setters来截取对对象成员的访问

注意点: 如果存在get,但没有set,则该属性自动是只读的

如果没有指定setter参数的类型,它将从getter的返回类型中推断出来

访问器和设置器必须有相同的成员可见性

代码演示:

export default {}
​
class MyName {private _fullname: string = "熊大";
​//读取字段的值get fullname() {console.log("get被调用了");return this._fullname;}// 设置读取字段的值set fullname(newName: string) {console.log("set被调用了");this._fullname = newName;}
}
​
let p0 = new MyName();
p0.fullname="熊二";
console.log(p0);
console.log(p0.fullname);

6、抽象类

定义:

抽象类做为其它派生类的基类使用。它们一般不会直接被实例化

抽象类是专门用于定义哪些不希望被外界直接创建的类的

抽象类和接口—样用于约束子类

抽象类和接口区别

抽象方法必须包含abstract关键字并且可以包含访问修饰符

接口中只能定义约束,不能定义具体实现。而抽象类中既可以定义约束,又可以定义具体实现

代码演示:

export default {}
​
abstract class Person {abstract name: string;abstract age: number;abstract show(): string;
​showName(): void {console.log("你好");
​}
}
​
class Student extends Person {name: string = "光头强"age: number = 30show() {return '熊出没'}
}
​
let p0 = new Student();
console.log(p0);//Student { name: '光头强', age: 30 }
let res =p0.show();
console.log(res);//熊出没

7、implements子句

类可以实现接口,使用关键字implements

可以使用一个implements子句来检查一个类,是否满足了一个特定的接口。如果一个类不能正确地实现它,就会发出一个错误

注意点:

实现一个带有可选属性的接口并不能创建该属性

只要一个接口继承了某个类,那么就会继承这个类中所有的属性和方法,但是只会继承属性和方法的声明,不会继承属―性和方法实现与extends 的区别

extends:继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法implements:继承某个类,必须重写才可以使用

代码演示:

export default {}
​
interface IPersonInfo {name: string;age: number;sex?: string;show(): void;
}
​
interface IMusic {music: string;
}
​
class Person implements IPersonInfo, IMusic {name: string = "熊大";age: number = 18;sex: string = "公";music: string = "会唱歌"show(): void {console.log(`我叫${this.name},今年${this.age},我是${this.sex}的`)}
}
let p0 = new Person();
p0.sex = ""
p0.show();
​
​
// 注意点:只要一个接口继承了某个类,那么就会继承这个类中所有的属性和方法
//但是只会继承属性和方法的声明,不会继承属性和方法实现
​
interface ITest extends Person {salary: number;
}
​
class Star extends Person implements ITest {name: string = "熊二";age: number = 20;salary: number = 30000;
}
let p1 = new Star();
console.log(p1.name);
console.log(p1.salary);

8、类的初始化顺序

基类的字段被初始化

基类构造函数运行

子类的字段被初始化

了类构造函数运行工

代码演示

export default {}
​
class Old {name: string = "熊大";constructor() {console.log(`我是${this.name},我主演了《熊出没》`);}
}
​
class Young extends Old{name: string = "喜洋洋";constructor() {super();console.log(`我是${this.name},我主演了《喜羊羊与灰太狼》`);}
}
let p0 = new Young();

TypeScript类的使用相关推荐

  1. .NET手撸绘制TypeScript类图——下篇

    .NET手撸绘制TypeScript类图--下篇 在上篇的文章中,我们介绍了如何使用 .NET解析 TypeScript,这篇将介绍如何使用代码将类图渲染出来. 类型定义渲染 不出意外,我们继续使用  ...

  2. .NET手撸绘制TypeScript类图——上篇

    .NET手撸绘制TypeScript类图--上篇 近年来随着交互界面的精细化, TypeScript越来越流行,前端的设计也越来复杂,而 类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方 ...

  3. typescript get方法_.NET手撸绘制TypeScript类图——上篇

    .NET手撸绘制TypeScript类图--上篇 近年来随着交互界面的精细化,TypeScript越来越流行,前端的设计也越来复杂,而类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方式. ...

  4. TypeScript 类(Class)

    TypeScript 类(Class) 自 ES6 起,终于迎来了 class,对于开发者来说,终于可以使用基于类的面向对象式编程.TypeScript 在原 ES6 中类的基础上,还添加了一些新的功 ...

  5. 三分钟快速了解typeScript 类

    typeScript 类 类描述了所创建的对象共同的属性和方法. 类的定义 继承 类里面的修饰符 静态属性 静态方法 抽象类 继承 多态 类的定义 class person {name:string; ...

  6. Typescript类,泛型,各种类型工具

    一.TypeScript 类 一个类可以包含以下几个模块: 1.属性 1.1 类属性 1.2 实例属性 2.构造函数(在python中叫初始化函数) 该函数在类实例化时会被立即调用 3.方法(也是函数 ...

  7. 05 TypeScript 类的使用

    目录 1.1 类的基本使用 1.2 类的继承 1.3 static和instanceof 1.4类中的修饰符 1.5 getter与setter 1.6 抽象类 1.7 implements子句 1. ...

  8. TypeScript类

    目录 1-1.类的基本使用 1-2.类的继承 1-3.static与instanceof 1-4.类中的修饰符 1-5.getter与setter 1-6.抽象类 1-7.implements子句 1 ...

  9. TypeScript = 类

    TypeScript笔记 5. TypeScript => 类 // 1. ts如何定义类 /* class Person {name:string;constructor(name:strin ...

  10. TypeScript 接口和TypeScript类

    目录 一.TypeScript 接口 1.TypeScript 接口的定义和简单使用 2.联合类型和接口 3.接口和数组 4.接口继承 二.TypeScript 类 1.TypeScript 类的定义 ...

最新文章

  1. python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程
  2. STL标准库vector笔记
  3. 前沿观察 | SageDB:一个自学成才的数据库
  4. HelloSilverlight
  5. 数据库技术丨GaussDB(DWS)数据同步状态查看方法
  6. ubuntu 16.04 x86_64中arm-none-linux-gnueabi-不起作用时的解决方案
  7. Leetcode每日一题:690.employee-importance(员工的重要性)
  8. MATLAB-多目标线性规划问题
  9. gwas snp 和_如何利用分子实验验证GWAS发现的SNP?
  10. GPRS DTU工作原理 GPRS DTU通信终端
  11. 你喜欢什么样的团队氛围
  12. 电脑清空企业微信聊天记录
  13. 中国石油大学 现代远程教育入学指南
  14. BC35 RAI功能应用
  15. sicily 1007. To and Fro(破译密码)
  16. 如何提高亚马逊排名?亚马逊排名规则有哪些?
  17. python笔记: numpy matrix 随机抽取几行或几列
  18. 利用 API 爬取数据,试着爬取 QQ 音乐流行指数榜
  19. 高等数学笔记:关于等价无穷小替换的一个猜想
  20. [2011-04-30]返现网排行榜

热门文章

  1. IE6及IE8默认SSL设置
  2. android 碎屏功能,如何从碎屏的Android手机中恢复数据
  3. [转] meta标签的使用方法
  4. Linux 系统故障排查
  5. 2021-2022学年广州市执信中学九年级第一学期12月考英语试题
  6. 七骑士android版上线时间,七骑士新版本登场 开启征服樱之国度旅程
  7. The Rust Programming Language - 第19章 高级特征 - 19.5 宏
  8. 每周一更——新的起点
  9. 面试太紧张 不善表达怎么办?
  10. 选择WMS仓库管理系统之前,企业应该准备些什么