目录

1.1 类的基本使用

1.2 类的继承

1.3 static和instanceof

1.4类中的修饰符

1.5 getter与setter

1.6 抽象类

1.7 implements子句

1.8 类的初始化顺序


1.1 类的基本使用

  • 定义

    TypeScript是面向对象的JavaScript.

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

    TypeScript支持面向对象的所有特性,比如类、接口等。

    TypeScript类定义方式如下:

class class_name{

//类作用域

}

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

  • 字段 - 字段是类里面声明的变量。字段表示对象的有关数据。
  • 构造函数 - 类实例化时调用,可以为类的对象分配内存。
  • 方法 - 方法为对象要执行的操作。
export default {}// 类的基本使用class Person{//注意点:需要先定义实例属性,才能够使用// 字段(属性)name:stringage:number// 构造函数constructor(name:string,age:number){this.name=name   //this——Personthis.age=age}// 函数(方法)sayHello(): void{console.log(`这是我的朋友${this.name},他今年${this.age}岁了`)}
}// 实例化类
let ag = new Person("李明",18)
ag.sayHello()

1.2 类的继承

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

类继承使用关键字extends,子类除了不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承。

TypeScript - -次只能继承一个类,不支持继承多个类,但TypeSript支持多重继承(A继承B, B继承C)。

语法格式如下: class child_class_name extends parent_class_name

export default {}class Person{//注意点:需要先定义实例属性,才能够使用// 字段(属性)name:stringage:number// 构造函数constructor(name:string,age:number){this.name=name   //this——Personthis.age=age}// 函数(方法)sayHello(): void{console.log(`这是我的朋友${this.name},他今年${this.age}岁了`)}
}class Son extends Person{score:stringconstructor(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 s = new Son("李明",18,"A")
s.sayHello()

1.3 static和instanceof

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

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

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

1.4类中的修饰符

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

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

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

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

export default {}class Person {public name: string;protected age: number;private sex: string;constructor(name: string, age: number, sex: string) {this.name = name;this.age=age ;this.sex=sex ;}say():void {console.log(`我的名字是${this.name},性别为${this.sex},今年${this.age}岁了`);}
}class Student extends Person{score:stringconstructor(name:string,age:number,sex:string,score:string){super(name,age,sex)this.score=score}say():void{console.log(this.name)console.log(this.age)// console.log(this.sex)console.log(this.score)}
}let s=new Student("王心凌",18,"女","A")
s.say()// readonly: 字段的前缀可以是readonly 修饰符。这可以防止在构造函数之外对该字段进行赋值。
class PrintConsole {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;}
}let pc = new PrintConsole("我的头发去哪了,颈椎康复指南","35岁失业该怎么办","外卖月入一万也挺好","活着")
console.log(pc)

1.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 n=new MyName()
n.fullName="刘亦菲" //赋值console.log(n)console.log(n.fullName) //取值

1.6 抽象类

  • 定义

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

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

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

  • 抽象类和接口区别

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

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

export default {}abstract class Person{abstract name:stringabstract age:numberabstract show():stringshowName():void{console.log("Hello world")}
}class Student extends Person{name: string="小李"age: number=18show(){return "罐头厂"}
}// // let p = new Person()
// let s = new Student()
// let res = s.show()
// console.log(res)

1.7 implements子句

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

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

注意点:

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

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

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

implements:继承某个类,必须重写才可以使用

export default {}/*extend:继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法implements :维承某个类,必须重写才可以使用
*/interface IpersonInfo{name:stringage:numbersex?:stringshow():void
}interface IMusic{music:string
}class Person implements IpersonInfo,IMusic{name: string="赵四"age: number=45// sex: string="男"music:string="不会唱"show(){console.log(`我是${this.name},今年${this.age}`)console.log(`我${this.name},唱歌的话${this.music}`)}
}let p=new Person()
p.show()
// p.name = "李明"
// p.sex = "男"   //报错// 注意点:只要一个接口继承了某个类,那么就会维承这个类中所有的属性和方法
// 但是只会继承属性和方法的声明,不会继承属性和方法实现interface ITest extends Person{salary:number
}class Star extends Person implements ITest{name: string="王五"age:number=20salary:number=5000
}let s=new Star()
console.log(s.name)
console.log(s.salary)

1.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 y=new Young()

05 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. JDK11源码学习05 | HashMap类

    JDK11源码学习05 | HashMap类 JDK11源码学习01 | Map接口 JDK11源码学习02 | AbstractMap抽象类 JDK11源码学习03 | Serializable接口 ...

  6. 三分钟快速了解typeScript 类

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

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

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

  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 ...

最新文章

  1. MyBatis-学习笔记12【12.Mybatis注解开发】
  2. Netweaver 服务器和客户端TLS版本号不匹配的解决方案
  3. 信息学奥赛一本通(1106:年龄与疾病)
  4. java cl 規格_Java JavaCL類代碼示例
  5. TensorFlow GAN项目程序回顾2020.12.03
  6. 43.访问控制过滤器(Access Control Filter)
  7. Hibernate批量操作(一)
  8. 【JavaScript学习笔记】计算机编程基础
  9. 软考程序员-C专题(1)
  10. 使用场景法对在线购网站编写的用例示范
  11. 增长智能引领营销数字化,数字中台掌控消费者旅程
  12. linux无线网卡驱动分析,基于Linux的无线网卡驱动程序
  13. Android系统下载管理DownloadManager功能介绍及使用示例
  14. 偏向锁,轻量级锁,重量级锁的核心原理
  15. [stm32 HAL库] RTC和BKP驱动
  16. 什么是真正的蒸汽朋克?
  17. Android扫车牌号识别技术SDK
  18. 关于服务器端和客户端的区别
  19. 菜单栏点击显示二级菜单_显示完整菜单
  20. Matplotlib画蜡烛图

热门文章

  1. 心灵是自我作主的地方。在心灵中,天堂可以变成地狱,地狱可以变成天堂
  2. Google 系应用设计相同、支持拉伸、修正原生实现诸多问题的星级评分条。可直接替换 RatingBar。
  3. 某里某淘bx-ua逆向解密
  4. 贾跃亭要回国圆“造车梦”?FF关联公司广州拿地601亩
  5. 小程序日历控件分享 按月传值显示
  6. 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3
  7. 死了都要try.【转】
  8. 推荐一款好用解压RAR、ZIP文件Mac软件,可以输入密码Dr. Unarchiver
  9. 看完现在年轻人的开发环境,我汗颜了,不服老不行【如何让你的IDLE与众不同】
  10. 实现阿里云SSH免密登录