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');
相关文章:

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

【LeetCode】124.二叉树中的最大路径和
题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root &…...
Linux命令总结
1.目录相关命令 绝对路径: 如/etc/init.d当前目录和上层目录: ./ …/主目录: ~/切换目录: c 2.进程相关命令 查看当前进程: ps ps -ef(system v 输出)ps -aux bsd 格式输出ps -ef|grep pid 执…...

SpringBoot临时属性设置
在Spring Boot中,可以通过设置临时属性来覆盖应用程序中定义的属性。这在某些情况下很有用,例如在命令行中指定配置参数或在测试环境中覆盖默认值。 你可以使用--(双破折号)语法来设置临时属性。以下是一些示例: 1. …...
【Python小知识】如何解决代理IP在多线程环境下的并发问题?
前言 在多线程环境下,使用代理IP可能会出现并发问题。具体而言,多个线程可能同时使用同一个代理IP,导致代理IP被封禁或无法访问。为了解决这个问题,我们需要使用一个代理IP池来管理可用的代理IP,并在多线程环境下动态…...
redis常见面试汇总
目录 Redis 适合的场景 Redis 不适合的场景 3、Redis 有哪些常见的功能? 什么是缓存穿透?怎么解决? 什么是缓存雪崩?该如何解决? 参考文献: Redis 适合的场景 缓存:减轻 MySQL 的查询压力…...
子数组的解释与专题
子数组:指在一个数组中,选择一些连续的元素组成的新数组。 例题一:6900. 统计完全子数组的数目 给你一个由 正 整数组成的数组 nums 。 如果数组中的某个子数组满足下述条件,则称之为 完全子数组 : 子数组中 不同 …...

PHP: 开发入门macOS系统下的安装和配置
安装Homebrew 安装 ~~友情提示:这个命令对网络有要求,可能需要翻墙或者用你的手机热点试试,或者把DNS换成(114.114.114.114 和 8.8.8.8) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…...
在CentOS下安装docker
1)在Cent OS安装docker先有一个Cent OS 7.6系统 这个很重要,不同版本按照的时候是不一样的。 2)查看CentOS版本 cat /etc/redhat-releas 3)用root账户登录进去配置国内yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http:…...
[JavaWeb]SQL介绍-DQL查询数据
SQL介绍-DQL查询数据 一.基础查询二.条件查询三.排序查询1.聚合函数2.分组查询 四.分页查询 DQL查询基础的语法结构如下: SELECT字段列表 FROM表名列表 WHERE条件列表 GROUP BY分组字段 HAVING分组后条件 ORDER BY排序字段 LIMIT分页限定一.基础查询 说明语法查询…...

[containerd] 在Windows上使用IDEA远程调试containerd, ctr, containerd-shim
文章目录 1. containerd安装2. 源码编译3. 验证编译的二进制文件是否含有调试需要的信息3.1. objdump工具验证3.2. file工具验证3.3. dlv工具验证 4. debug 1. containerd安装 [Ubuntu 22.04] 安装containerd 2. 源码编译 主要步骤如下: 1、从github下载containe…...

Verilog语法学习——LV4_移位运算与乘法
LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述: 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/…...
打卡力扣题目九
#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、解题方法一 三、解题方法二 四、两种方法的区别 关于 ARTS 的释义 —— 每周完成一个 ARTS: ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个…...

Python零基础入门(九)——函数,类和对象
系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不…...
在linux上面部署activemq
1、下载 网址:ActiveMQ 注意:新版本5.17起 要求jdk11, 5.16兼容jdk8, 所以,确保已经安装 java11 或以上的版本 这里安装较新版:5.18.2,已经安装了java17 如何安装jdk17,请详见我的另一篇文章:linux…...
mysql的sql语句优化方法面试题总结
mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 10 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t…...

小程序 获取用户头像、昵称、手机号的组件封装(最新版)
在父组件引入该组件 <!-- 授权信息 --><auth-mes showModal"{{showModal}}" idautnMes bind:onConfirm"onConfirm"></auth-mes> 子组件详细代码为: authMes.wxml <!-- components/authMes/authMes.wxml --> <van-popup show…...
【Linux】简易shell外壳的制作
#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h>#define NUM 1024 #define SIZE 32 #define SEP " "// 保存完整的命令行字符串 char cmd_line…...

TenserRT(四)在 PYTORCH 中支持更多 ONNX 算子
第四章:在 PyTorch 中支持更多 ONNX 算子 — mmdeploy 0.12.0 文档 PyTorch扩充。 PyTorch转换成ONNX: PyTorch有实现。PyTorch可以转化成一个或者多个ONNX算子。ONNX有相应算子。 如果即没有PyTorch实现,且缺少PyTorch与ONNX的映射关系&…...
前端高级面试题-浏览器
1 事件机制 事件触发三阶段 document 往事件触发处传播,遇到注册的捕获事件会触发 传播到事件触发处时触发注册的事件 从事件触发处往 document 传播,遇到注册的冒泡事件会触发 事件触发⼀般来说会按照上⾯的顺序进⾏,但是也有特例&#x…...
PDF文件转换之输出指定页到新的 PDF 文件
背景 一份 PDF 学习资料需要打印其中某几页,文件有几百兆,看到 WPS 有PDF拆分功能,但是需要会员,开了一个月会员后完成了转换。突然想到,会员到期后如果还要拆解的话,怎么办呢?PDF 文件拆解功能…...

26 C 语言函数深度解析:定义与调用、返回值要点、参数机制(值传递)、原型声明、文档注释
1 函数基础概念 1.1 引入函数的必要性 在《街霸》这类游戏中,实现出拳、出脚、跳跃等动作,每项通常需编写 50 - 80 行代码。若每次调用都重复编写这些代码,程序会变得臃肿不堪,代码可读性与维护性也会大打折扣。 为解决这一问题&…...

LangChain-自定义Tool和Agent结合DeepSeek应用实例
除了调用LangChain内置工具外,也可以自定义工具 实例1: 自定义多个工具 from langchain.agents import initialize_agent, AgentType from langchain_community.agent_toolkits.load_tools import load_tools from langchain_core.tools import tool, …...

深入浅出:Spring IOCDI
什么是IOC IOC IOC(Inversion of Control),是一种设计思想,在之前的SpringMVC里就在类上添加RestController和Controller注解就是使用了IOC,这两个注解就是在Spring中创建一个对象,并将注解下的类交给Spring管理,Spr…...
如何科学测量系统的最高QPS?
要准确测量系统的最高QPS(Queries Per Second),既不能简单依赖固定请求数(如2万次),也不能盲目压到服务器崩溃。以下是专业的方法论和步骤: 1. 核心原则 目标:找到系统在稳定运行&a…...
基于BERT-Prompt的领域句子向量训练方法
基于BERT-Prompt的领域句子向量训练方法 一、核心原理:基于BERT-Prompt的领域句子向量训练方法 论文提出一种结合提示学习(Prompt Learning)和BERT的领域句子向量训练方法,旨在解决装备保障领域文本的语义表示问题。核心原理如下: 以下通过具体例子解释传统词向量方法和…...
【C/C++】基于 Docker 容器运行的 Kafka + C++ 练手项目
文章目录 基于 Docker 容器运行的 Kafka C 练手项目1 项目目的2 项目框架3 代码4 编译运行5 功能与接口说明5.1 Producer 接口:producer.cpp关键调用流程参数说明 5.2 Consumer 接口:consumer.cpp关键调用流程消费流程中注意 5.3 工程技术点 基于 Docke…...

RabbitMQ 应用 - SpringBoot
以下介绍的是基于 SpringBoot 的 RabbitMQ 开发介绍 Spring Spring AMQP RabbitMQ RabbitMQ tutorial - "Hello World!" | RabbitMQ 工程搭建步骤: 1.引入依赖 2.编写 yml 配置,配置基本信息 3.编写生产者代码 4.编写消费者代码 定义监听类,使用 RabbitListener…...

吉林大学操作系统上机实验五(磁盘引臂调度算法(scan算法)实现)
本次实验无参考,从头开始实现。 一.实验内容 模拟实现任意一个磁盘引臂调度算法,对磁盘进行移臂操作列出基于该种算法的磁道访问序列,计算平均寻道长度。 二.实验设计 假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。磁盘是可…...
HarmonyOS 5 应用开发导读:从入门到实践
一、HarmonyOS 5 概述 HarmonyOS 5 是华为推出的新一代分布式操作系统,其核心设计理念是"一次开发,多端部署"。与传统的移动操作系统不同,HarmonyOS 5 提供了更强大的跨设备协同能力,支持手机、平板、智能穿戴、智慧屏…...