05 TypeScript 类的使用
目录
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 类的使用相关推荐
- .NET手撸绘制TypeScript类图——下篇
.NET手撸绘制TypeScript类图--下篇 在上篇的文章中,我们介绍了如何使用 .NET解析 TypeScript,这篇将介绍如何使用代码将类图渲染出来. 类型定义渲染 不出意外,我们继续使用 ...
- .NET手撸绘制TypeScript类图——上篇
.NET手撸绘制TypeScript类图--上篇 近年来随着交互界面的精细化, TypeScript越来越流行,前端的设计也越来复杂,而 类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方 ...
- typescript get方法_.NET手撸绘制TypeScript类图——上篇
.NET手撸绘制TypeScript类图--上篇 近年来随着交互界面的精细化,TypeScript越来越流行,前端的设计也越来复杂,而类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方式. ...
- TypeScript 类(Class)
TypeScript 类(Class) 自 ES6 起,终于迎来了 class,对于开发者来说,终于可以使用基于类的面向对象式编程.TypeScript 在原 ES6 中类的基础上,还添加了一些新的功 ...
- JDK11源码学习05 | HashMap类
JDK11源码学习05 | HashMap类 JDK11源码学习01 | Map接口 JDK11源码学习02 | AbstractMap抽象类 JDK11源码学习03 | Serializable接口 ...
- 三分钟快速了解typeScript 类
typeScript 类 类描述了所创建的对象共同的属性和方法. 类的定义 继承 类里面的修饰符 静态属性 静态方法 抽象类 继承 多态 类的定义 class person {name:string; ...
- Typescript类,泛型,各种类型工具
一.TypeScript 类 一个类可以包含以下几个模块: 1.属性 1.1 类属性 1.2 实例属性 2.构造函数(在python中叫初始化函数) 该函数在类实例化时会被立即调用 3.方法(也是函数 ...
- TypeScript类
目录 1-1.类的基本使用 1-2.类的继承 1-3.static与instanceof 1-4.类中的修饰符 1-5.getter与setter 1-6.抽象类 1-7.implements子句 1 ...
- TypeScript = 类
TypeScript笔记 5. TypeScript => 类 // 1. ts如何定义类 /* class Person {name:string;constructor(name:strin ...
最新文章
- MyBatis-学习笔记12【12.Mybatis注解开发】
- Netweaver 服务器和客户端TLS版本号不匹配的解决方案
- 信息学奥赛一本通(1106:年龄与疾病)
- java cl 規格_Java JavaCL類代碼示例
- TensorFlow GAN项目程序回顾2020.12.03
- 43.访问控制过滤器(Access Control Filter)
- Hibernate批量操作(一)
- 【JavaScript学习笔记】计算机编程基础
- 软考程序员-C专题(1)
- 使用场景法对在线购网站编写的用例示范
- 增长智能引领营销数字化,数字中台掌控消费者旅程
- linux无线网卡驱动分析,基于Linux的无线网卡驱动程序
- Android系统下载管理DownloadManager功能介绍及使用示例
- 偏向锁,轻量级锁,重量级锁的核心原理
- [stm32 HAL库] RTC和BKP驱动
- 什么是真正的蒸汽朋克?
- Android扫车牌号识别技术SDK
- 关于服务器端和客户端的区别
- 菜单栏点击显示二级菜单_显示完整菜单
- Matplotlib画蜡烛图
热门文章
- 心灵是自我作主的地方。在心灵中,天堂可以变成地狱,地狱可以变成天堂
- Google 系应用设计相同、支持拉伸、修正原生实现诸多问题的星级评分条。可直接替换 RatingBar。
- 某里某淘bx-ua逆向解密
- 贾跃亭要回国圆“造车梦”?FF关联公司广州拿地601亩
- 小程序日历控件分享 按月传值显示
- 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3
- 死了都要try.【转】
- 推荐一款好用解压RAR、ZIP文件Mac软件,可以输入密码Dr. Unarchiver
- 看完现在年轻人的开发环境,我汗颜了,不服老不行【如何让你的IDLE与众不同】
- 实现阿里云SSH免密登录