Tyspscript中的class
申明一个类 class
class 类名 {// class中主要包含两个部分,属性和方法属性方法
}
实例属性和类属性
- 实例属性:实例化之后,也就是new之后才能用的属性和方法
- 类属性(静态属性):class本身自己直接使用的,下面是TS中的属性修饰符
- static:静态属性,属于类自身不属于实例,只有自身可以访问到
- readonly:只读属性,只允许读取,不允许修改
- public:所有属性的默认属性。随意读写
- private:申明是一个私有属性,不允许在外部访问
- protected:和private基本一样,也是不允许在外部访问,但是允许在子 类中访问
- demo
class Person {// 定义实例属性name:string = '景天';// 在属性前使用static关键字可以定义类属性static age:number = 18;// 定义实例方法sayHello() {console.log('Hello')}// 定义类方法static sayHi() {console.log('Hi')} }// 实例属性和方法的使用 class p = new Person() console.log(p.name) p.sayHello()// 类属性和方法的使用 console.log(Person.age) Person.sayHi()
class中的构造函数(constructor)
- 常规写法
class Person {name: stringage: number// constructor 被称为构造函数// 构造函数会在实例对象创建的时候调用constructor(name:string,age:number) {// 在实例方法中,this就是表示当前的实例// 在构造函数中,当前对象就是当前新建的那个对象// 可以通过this向新建的对象中添加属性this.name = namethis.age = age}sayHi() {// 在实例方法中,可以通过this来表示当前调用方法的对象console.log(this)console.log(`你好,我是${this.name}`)} }class p = new Person('景天',18) console.log(p.name,p.age)
- 简写方式
class Person {// 可以把属性的定义写到构造函数的参数中去,所示一种语法糖的写法constructor(public name:string, public age:number) {}sayHi() {console.log(`你好,我是${this.name}`)} }class p = new Person('景天',18) console.log(p.name,p.age)
class中的继承
- 使用继承后,子类将会拥有父类所有的方法和属性。
- 如果子类中和父类中有相同的属性和方法,子类中会覆盖父类的方法。
- 使用:
子类 extends 父类
- demo
// 创建一个父类 class Animal {name: stringconstructor(name:string) {this.name = name}sayHi() {console.log('动物们说Hi')} }// 狗这个子类继承父类 class Dog extends Animal {age: numberconstructor(name:string,age:number) {// 如果在子类中写了构造函数,在子类的构造函数中必须要调用下父类的构造函数// super就是代表父类中的构造函数super(name);this.age = age}// 添加一个自己的方法run() {console.log('我在跑呢')} }// 猫这个子类继承父类 class Cat extends Animal {// 子类中也有sayHi方法,会覆盖父类中的方法,使用自己的方法sayHi() {console.log('喵喵喵喵')} }let dog = new Dog('哮天犬',1000) dog.sayHi() dog.run() let cat = new Cat('九命猫妖') cat.sayHi()
抽象类和抽象方法
- 抽象类:用abstract开头,这代表是一个抽象类,抽象类和其他类的区别不大,只是不能用来创建对象。
- 抽象方法:同样abstract开头,抽象方法只能定义在抽象类中,并且子类中必须对抽象方法进行重写。
- demo
// 创建一个父类 /* 我们之前创建的父类,除了可以被继承,自己也可以实例化,但是有时候我们就想申明一个父类,不允许实例化。那么可以用abstract开头,这代表是一个抽象类,抽象类和其他类的区别不大,只是不能用来创建对象。可以说抽象类就是用来创建父类给子类继承的。抽象类中可以添加抽象方法。 */ abstract class Animal {name: stringconstructor(name:string) {this.name = name}// 定义一个抽象方法,同样abstract开头,没有方法体。// 抽象方法只能定义在抽象类中,并且子类中必须对抽象方法进行重写。// void:空值abstract sayHi():void }class Dog extends Animal {sayHi() {console.log("汪汪汪")} }let a = new Animal() // 这样就会报错,因为不允许实例化
接口
- 和抽象类相比
- 抽象类的属性值可以是有值得也可以是没值,接口的属性值都是没值的,只定义结构,不考虑实际值
- 接口中所有的方法都是抽象方法。
- 使用抽象类,是用extends继承,可以继承父类的方法,也可以重写。接口是使用implements,而且必须满足接口中所有要求
- demo
// 定义一个接口 interface myInter {name: stringsayHello():void }// 定义一个类去实现上面的接口,必须满足接口的所有要求 class Myclass implements myInter {name:stringconstructor(name:string) {this,name = name}sayHello() {console.log('Hello')} }// 接口如何扩展呢?可以使用extends扩展,但是原来的不会改变 interface myInter2 extends myInter {age: number }// 需要注意的一点是,接口是允许重复的,并不会覆盖,而是会合并 // 下面这样的,obj就会有两个属性name和age interface obj {name: string } interface obj {age: number }
属性的封装
- 应用场景:有时候我们不想属性简单的暴露出去,也不想被随意更改
- 简单的封装
class Person {/* TS可以在属性前面添加修饰符- static:静态属性,属于类自身不属于实例,只有自身可以访问到- readonly:只读属性,只允许读取,不允许修改- public:所有属性的默认属性。随意读写- private:申明是一个私有属性,不允许在外部访问- protected:和private基本一样,也是不允许在外部访问,但是允许在子类中访问*/// 私有化两个属性private _name:stringprivate _age: numberconstructor(name:string,age:number) {this._name = name;this._age = age;}// 提供给外界访问和修改私有属性的方法getName() {return this._name}setName(value:string) {this._name = value}getAge() {return this._name}setAge(value:number) {if(value > 0) {this._age = value}} }let p = new Person('景天',18)console.log(p.getName()); p.setName('雪见') console.log(p.getAge()); p.setAge(17)
- 存取器,比上面简单的封装好的多,这才是常用的方式
// 使用属性存取器 class Person {// 私有化两个属性private _name:stringpaivate _age: numberconstructor(name:string,age:number) {this._name = name;this._age = age;}// 提供给外界访问和修改私有属性的方法get name() {return this._name}set name(value:string) {this._name = value}get age() {return this._name}set age(value:number) {if(value > 0) {this._age = value}} }let p = new Person('景天',18)console.log(p.name); p.name = '雪见' console.log(p.age); p.age = 17
Tyspscript中的class相关推荐
- GNU Make 使用手册(于凤昌中译版)
GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...
- 面试:第十二章:所有总结
Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...
- linux内核分析(转自某位大哥网上的笔记)
启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...
- golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...
- 总结一下在使用某里云服务器的过程中出现过的一些问题
此文总结在使用阿里云的过程中出现过的问题 想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...
- Kubernetes 中 设置pod不部署在同一台节点上
在k8s中,节点的调度主要由亲和性和污点来进行控制的. 而在亲和性部分由分为了节点亲和性和节点反亲和性. 节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...
- 在Dockerfile中设置G1垃圾回收器参数
在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...
- 在kotlin companion object中读取Bean,注入Bean对象
在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件. 使用组 ...
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
最新文章
- 程序员晒元宵节福利,网友:看了我想砸键盘......
- Android通过Scheme协议打开APP界面
- python easy install_Python 安装easy_install详解
- centos 7 yum 安装 MongoDB 4.2
- 最常见的13种主数据管理(MDM)词汇和定义
- c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联
- bt种子文件文件结构
- 信息学奥赛一本通1045
- 线控转向——Carsim与simulink联合仿真模型 包含转向电机模型,转向执行机构模型,齿轮齿条模型
- 游戏里的攻防-检测与反检测
- (亲测解决)每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档
- RPC框架简析--Pigeon
- 打开文件位置在计算机游戏里面,Win7电脑“打开或关闭windows功能”里面没有游戏文件夹的修复方法...
- 解决谷歌浏览器打开控制台有延迟
- oracle如何设置连接数,关于Oracle连接数设置
- WPS的word文档页面右边有一段空白原因
- Go语言自学系列 | go语言数字类型
- 多目立体匹配的前世今生 | 聊一聊MVS及其在3D检测中的应用
- mysql show tables_mysql show命令用法
- ubuntu 的远程桌面客户端工具tsclient