TypeScript -- 类

文章目录

    • TypeScript -- 类
    • TS -- 类的概念
      • 创建一个简单的ts类
      • 继承
    • public / private / protected-- 公共/私有/受保护的
      • public -- 公共
      • private -- 私有的
      • protected -- 受保护的
    • 其他特性
      • readonly -- 只读属性
      • 静态属性 -- static修饰
      • ts的getter /setter
      • 抽象类abstract

TypeScript – 类

JavaScript 通过构造函数实现类的概念,通过原型链实现继承。而在 ES6 中,我们终于迎来了 class。
TypeScript 除了实现了所有 ES6 中的类的功能以外,还添加了一些新的用法。

TS – 类的概念

1. (Class):定义了一件事物的抽象特点,包含它的属性和方法
2. 对象(Object):类的实例,通过 new 生成
3. 面向对象(OOP)的三大特性:封装、继承、多态* 封装(Encapsulation):将对数据的操作细节隐藏起来,只暴露对外的接口。* 继承(Inheritance):子类继承父类,子类除了拥有父类的所有特性外,还有一些更具体的特性* 多态(Polymorphism):由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。
4. 存取器(getter & setter):用以改变属性的读取和赋值行为
5. 修饰符(Modifiers):修饰符是一些关键字,用于限定成员或类型的性质。比如 public 表示公有属性或方法
6. 抽象类(Abstract Class):抽象类是供其他类继承的基类,抽象类不允许被实例化。抽象类中的抽象方法必须在子类中被实现
7. 接口(Interfaces):不同类之间公有的属性或方法,可以抽象成一个接口。接口可以被类实现(implements)。一个类只能继承自另一个类,但是可以实现多个接口

创建一个简单的ts类

class 定义类,使用 constructor 定义构造函数。
通过 new 生成新实例的时候,会自动调用构造函数。
class Animal {constructor(name) {this.name = name;}sayHi() {return `My name is ${this.name}`;}
}let a = new Animal('Jack');
console.log(a.sayHi()); // My name is Jack

继承

使用 extends 关键字实现继承,子类中使用 super 关键字来调用父类的构造函数和方法。
class Animal {public name: stringconstructor(name) {this.name = name;}sayHi() {return `My name is ${this.name}`;}
}
class Cat extends Animal {constructor(name: string) {super(name); // 调用父类的 constructor(name)}sayHi() {return 'Meow, ' + super.sayHi(); // 调用父类的 sayHi()}
}

public / private / protected-- 公共/私有/受保护的

public – 公共

'public'修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 'public'
class Animal {public name;public constructor(name) {this.name = name;}
}let a = new Animal('Jack');
console.log(a.name); // Jack
a.name = 'Tom';
console.log(a.name); // Tom

private – 私有的

当成员被标记成private时,它就不能在声明它的类的外部访问,简单的说,只有
自己的class内部可以访问,即使是自己的'实例''继承的子类' 都无法访问被'private'
修饰的内容
class Animal {private name: string;constructor(name: string) {this.name = name // 能调用private修饰的}public getName(){return `我的名字${this.name}` // 能调用private修饰的}
}class Cat extends Animal {constructor(name: string) {super(name)}getTest(){console.log(this.name) // 错误提示:属性“name”为私有属性,只能在类“Animal ”中访问。}
}const dog= new Animal ('dog')
// dog.name = "Anne" // 提示错误:属性“name”为私有属性,只能在类“Animal”中访问。
console.log(dog.getName()) // 可以访问,打印结果:我的名字Anneconst cat = new Cat ('cat')
// cat.getTest() // 这里是错误的 因为Cat 类也无法使用继承父类的私有属性或者方法

protected – 受保护的

1.修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许
被访问的,简单的 说'子类是可以访问protected 修饰的' 实例是不可以的
2.修饰的是'constructor' 则当前类不能创建实例
class Animal {protected name: stringprotected constructor(name: string) {this.name= name}protected getName() {return this.name}
}
//protected 修饰constructor不能创建实例 报错提示:类“Animal”的构造函数是受保护的,仅可在类声明中访问。
// const cat = new Animal (18) class Dog extends Animal {constructor(name: string) {console.log(super.getName()) // 可以访问父类中的protected方法}
}
const dog= new Dog('Laura')

其他特性

readonly – 只读属性

可以使用readonly关键字将属性设置为只读的。
class Animal {readonly name;public constructor(name) {this.name = name;}
}let a = new Animal('Jack');
console.log(a.name); // Jack
a.name = 'Tom'; // 错误 name是只读的

静态属性 – static修饰

1.'ts' 提供了 静态属性,属性和方法都是'static' 修饰
2.静态方法没法直接调用类里面的属性,当想要调用类里面的属性的时候需要声明静态的属性
class Animal {public static getName() {return Animal.name}private static name: string= 18constructor() {}
}
const p = new Animal()
// console.log(p.age) // age 是静态的属性 所以实例是不能访问的
// console.log(Animal.age) // 虽然有了类但是也是不能访问的,因为用了private修饰用public可以访问

ts的getter /setter

使用 getter 和 setter 来改变属性的赋值和读取行为
class Animal {constructor(name) {this.name = name;}get name() {return 'Jack';}set name(value) {console.log('setter: ' + value);}
}let a = new Animal('Kitty'); // setter: Kitty
a.name = 'Tom'; // setter: Tom
console.log(a.name); // Jack

抽象类abstract

1.抽象类是不允许被实例化的
2.继承抽象类的类必须去实现实例中的抽象类中的'抽象方法''抽象属性'
abstract class Animal {public name;public constructor(name) {this.name = name;}public abstract sayHi();
}class Cat extends Animal {public sayHi() { // 实现抽象类的抽象方法console.log(`Meow, My name is ${this.name}`);}
}
let cat = new Cat('Tom');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[开发|java] java 将json转化java对象

使用Jackson库将JSON转换为Java对象&#xff1a; 安装依赖 <!-- Jackson Core --> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.12.5</version> </depen…

KnowStreaming系列教程第三篇——调度任务模块

前一篇文章KnowStreaming系列教程第二篇——项目整体架构分析_诸葛子房_的博客-CSDN博客 讲述了KS的整体项目目录&#xff0c;这边文章来讲述下KS在调度模块里面对于指标采集和元数据同步 一、调度模块代码主要在km-task里面 public class TaskClusterAddedListener impleme…

opengauss安装

opengauss安装 系统环境 Redhat版本&#xff1a;redhat7.6 虚拟机ip&#xff1a;192.168.5.144 Gauss版本&#xff1a;openGauss-5.0.0-CentOS-64bit-all.tar.gz 企业版 一&#xff0e;准备软硬件环境 1.1 安装依赖包 yum -y install bzip2 python3 libaio-devel flex bis…

hive 相关总结

1、表复制(五分区表复制) create table t1 as select name,age from t2 where ds>2022-06-04 2、表覆盖(先清空表中的原有数据&#xff0c;再向表中插入数据) insert overwrite TABLE t1 select name,age from t2 where ds>2022-06-04 3、表分区覆盖&#xff08;先清空表…

LeetCode中删除数组元素

26&#xff0c;80 题是删除 有序数组 中的 重复项 对于此类问题&#xff0c;我们应该进行如下考虑&#xff1a; 由于是保留 k 个相同数字&#xff0c;对于前 k 个数字&#xff0c;我们可以直接保留。对于后面的任意数字&#xff0c;能够保留的前提是&#xff1a;与当前写入的位…

题目:2119.反转两次的数字

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2119. 反转两次的数字 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 当该数字不为 0 且最低位为 0 时&#xff0c;反转两次不是本身&#xff0c;返回 false&#xff0c;否则&#xff0c;反…

shiro的优点

shiro是一个强大的java安全框架&#xff0c;它的优点有以下&#xff1a; shiro就是权限管理&#xff1a;包括两部分&#xff1a;身份验证、授权 一、它提供了身份验证、授权、密码和会话管理等功能&#xff0c;可以满足各种应用程序的安全需求。 身份认证就是&#xff1a;验证是…

Python面试:技巧与实践

Python面试&#xff1a;技巧与实践 在当今的IT行业中&#xff0c;Python已经成为了一种非常流行的编程语言。它以其简洁明了的语法、强大的库支持和广泛的应用领域&#xff0c;吸引了无数的开发人员。然而&#xff0c;掌握Python并不是一件容易的事情&#xff0c;尤其是在面试…

mybatisPlus入门篇

文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…

ChatGPT把python 的import和from讲明白了

文章目录 1、import&#xff1a;import关键字用于导入整个模块&#xff0c;您可以使用该模块中的所有对象。语法如下&#xff1a;2、from ... import ...&#xff1a;from ... import ... 语法用于从模块中导入特定的对象&#xff0c;而不是导入整个模块。您可以通过这种方式选…

基于Web的智慧景区GIS三维可视化运营系统

随着人民生活水平的提高和旅游产品的丰富多样&#xff0c;我国人民对于旅游的需求逐渐从“走过场”转变为“品质体验”。 建设背景 随着互联网、大数据、人工智能等新技术在旅游领域的应用&#xff0c;以数字化、网络化、智能化为特征的智慧旅游成为旅游业高质量发展新动能。…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块11

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Django模板语法和请求

1、在django关于模板文件加载顺序 创建的django项目下会有一个seeetings.py的文件 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’)&#xff0c;如果是pycharm创建的django项目会加上&#xff0c;就会默认先去根目录找templates目录下的html文件&#xff0c…

安全学习DAY06_抓包技术-HTTPHTTPS

抓包技术-HTTP&HTTPS HTTP&HTTPS抓包针对Web&APP&小程序&PC应用等 本节目的&#xff1a; 掌握几种抓包工具证书安装操作掌握几种HTTP&HTTPS抓包工具的使用学会Web&#xff0c;APP&#xff0c;小程序&#xff0c;PC应用等抓包了解本节课抓包是针对哪些…

EAP设备自动化控制系统在设备数采和控制方面的优势

随着科技的不断进步和工业自动化的发展&#xff0c;EAP&#xff08;Equipment Automation Program&#xff09;设备自动化控制系统在各个行业中扮演着越来越重要的角色。作为连接MES&#xff08;Manufacturing Execution System&#xff09;和设备层的沟通桥梁&#xff0c;EAP系…

Chatgpt Web API 创建对话,免费,不计token数量,模仿网页提交对话

Chatgpt API 是收费的&#xff0c;按token使用量计费 Chatgpt Web API 免费的&#xff0c;只要有账号就可以使用。 curl https://chat.openai.com/backend-api/conversation \-H authority: chat.openai.com \-H accept: text/event-stream \-H accept-language: zh-CN,zh;q…

了解Unity编辑器之组件篇Mesh(三)

Mesh&#xff1a;是一种三维模型的表示形式&#xff0c;它由一系列顶点、三角形&#xff08;或其他多边形&#xff09;和相关属性组成。Mesh用于表示物体的外观和形状&#xff0c;它是可见物体的基本组成部分。通过操作Mesh&#xff0c;开发者可以实现各种视觉效果、物理模拟和…

Swagger如何将接口分组?

如果不分组管理端和用户端是混在一起的&#xff0c;不好查看。 在 docket创建的时候&#xff0c;加一行分组代码。 .groupName("用户端接口") 如果你加完之后&#xff0c;重启&#xff0c;报错。 这应该是你访问的网址仍是旧网址。 http://localhost:8080/doc.html#…

MySQL高可用之MHA集群

目录 一、MHA概述 1.1 什么是 MHA 1.2 MHA 的组成 1.3 MHA 的特点 二、MySQL MHA搭建准备 2.1 实验思路 2.2 实验准备 MHA一主两从高可用集群示意图&#xff1a; 三、搭建 MySQL MHA 3.1 配置主从复制 1、四台服务器都关闭防火墙 2、修改 Master、Slave1、Slave2 节…

解析 WebRTC

1 主要的类 RTCPeerConnection&#xff1a;用于建立点对点连接&#xff0c;实现音视频传输和数据通信。它负责协商媒体传输的参数、处理ICE候选项以及创建和管理媒体通道。 RTCDataChannel&#xff1a;用于在两个端点之间传输任意类型的数据。通过该通道&#xff0c;可以实现…