一、面向对象概述面向对象是程序中一个非常重要的思想面向对象简而言之就是程序之中所有的操作都需要通过对象来完成举例来说操作浏览器需要使用 window 对象操作网页要使用 document 对象操作控制台要使用 console 对象计算机程序的本质就是对现实事物的抽象抽象的反义是具体比如汽车模型是对具体汽车的抽象程序也是对事物的抽象一个事物到了程序中就变成了一个对象在程序中一切皆是对象在程序中所有的对象都被分成两个部分即数据与功能以人为例姓名、性别、年龄、身高、体重等属于人的数据说话、走路、吃饭、睡觉等属于人的功能数据在对象中被成为属性功能被称为方法二、类1、基本介绍类可以理解为对象的模型程序中可以根据类创建指定类型的对象class【类名】{【属性名】:【类型】;constructor(【参数】:【类型】){this.【属性名】【参数】;}【方法名】(){}}2、基本使用classPerson{name:string;age:number;constructor(name:string,age:number){this.namename;this.ageage;}sayHello(){console.log(大家好我是${this.name});}}constpnewPerson(张三,18);p.sayHello();三、面向对象特点1、封装1基本介绍对象实质上就是属性和方法的容器它的主要作用就是存储属性和方法这就是封装默认情况下对象的属性是可以任意的修改的为了确保数据的安全性在 TS 中可以对属性的权限进行设置2基本使用readonly只读属性无法修改classPerson{readonlyname:string;readonlyage:number;constructor(name:string,age:number){this.namename;this.ageage;}sayHello(){// this.name 李四; // 类中无法修改console.log(大家好我是${this.name});}}classEmployeeextendsPerson{constructor(name:string,age:number){super(name,age);// this.name name; // 子类中无法修改}}letpnewPerson(张三,20);console.log(p.name);// 张三// p.name 李四; // 通过对象无法修改public默认值可以在类、子类和对象中访问与修改classPerson{publicname:string;publicage:number;constructor(name:string,age:number){this.namename;this.ageage;}sayHello(){this.name李四;// 类中可以修改console.log(大家好我是${this.name});}}classEmployeeextendsPerson{constructor(name:string,age:number){super(name,age);this.namename;// 子类中可以修改}}letpnewPerson(张三,20);p.name李四;// 通过对象可以修改console.log(p.name);// 李四protected可以在类、子类中访问与修改classPerson{protectedname:string;protectedage:number;constructor(name:string,age:number){this.namename;this.ageage;}sayHello(){this.name李四;// 类中可以修改console.log(大家好我是${this.name});}}classEmployeeextendsPerson{constructor(name:string,age:number){super(name,age);this.namename;// 子类中可以修改}}letpnewPerson(张三,20);// console.log(p.name); // 通过对象无法访问// p.name 李四; // 通过对象无法修改private只能在类中访问与修改classPerson{privatename:string;privateage:number;constructor(name:string,age:number){this.namename;this.ageage;}sayHello(){this.name李四;// 类中可以修改console.log(大家好我是${this.name});}}classEmployeeextendsPerson{constructor(name:string,age:number){super(name,age);// this.name name; // 子类中无法修改}}letpnewPerson(张三,20);// console.log(p.name); // 通过对象无法访问// p.name 李四; // 通过对象无法修改getter 与 setter对于一些不希望被任意修改的属性可以将其设置为 private并在类中定义一组读取getter、写setter属性的方法这种对属性读写的方法被称为属性存取器classPerson{private_name:string;constructor(name:string){this._namename;}getname(){returnthis._name;}setname(name:string){this._namename;}}letp1newPerson(孙悟空);console.log(p1.name);// 孙悟空通过 getter 读取 name 属性p1.name猪八戒;// 通过 setter 修改 name 属性console.log(p1.name);// 猪八戒static静态属性方法也称为类属性无需创建实例通过类即可直接使用静态属性classTools{staticPI3.14;staticsum(num1:number,num2:number){returnnum1num2;}}console.log(Tools.PI);// 3.14console.log(Tools.sum(123,456));// 579this在类中this 是当前对象2、继承通过继承可以将父类中的属性和方法引入到当前类中classAnimal{name:string;age:number;constructor(name:string,age:number){this.namename;this.ageage;}}classDogextendsAnimal{bark(){console.log(${this.name}在汪汪叫);}}constdognewDog(旺财,4);dog.bark();方法重写通过继承可以在不修改类的情况下完成对类的扩展即方法重写在子类中可以使用 super 来完成对父类的引用classAnimal{name:string;age:number;constructor(name:string,age:number){this.namename;this.ageage;}run(){console.log(父类中的 run 方法);}}classDogextendsAnimal{bark(){console.log(${this.name}在汪汪叫);}run(){console.log(子类中的 run 方法会重写父类中的 run 方法);}superRun(){super.run();}}constdognewDog(旺财,4);dog.bark();// ----------dog.run();// 子类中的 run 方法会重写父类中的 run 方法dog.superRun();// 父类中的 run 方法抽象类抽象类是专门用来被继承的类它只能被继承不能用来创建实例使用 abstract 关键字的方法是抽象方法抽象方法没有方法体且只能定义在抽象类中继承抽象类时抽象方法必须要实现abstractclassAnimal{abstractrun():void;bark(){console.log(动物在叫~);}}classDogextendsAnimal{run(){console.log(狗在跑~);}}四、接口1、基本介绍接口的作用类似于抽象类不同点在于接口中的所有属性和方法都是没有实体的即都是抽象的接口主要负责定义一个类的结构2、基本使用接口可以去限制一个对象对象只有包含接口中定义的所有属性和方法时才能匹配接口interfacePerson{name:string;sayHello():void;}functionfn(p:Person){p.sayHello();}fn({name:孙悟空,sayHello(){console.log(你好我是${this.name});},});// 你好我是孙悟空一个类可以去实现接口实现接口的类中要包含接口中定义的所有属性和方法interfacePerson{name:string;sayHello():void;}classStudentimplementsPerson{constructor(publicname:string){}sayHello(){console.log(你好我是${this.name});}}letsnewStudent(张三);s.sayHello();// 你好我是张三五、泛型1、基本介绍定义一个函数或类时有些情况下无法确定其中要使用的具体类型即参数的类型、返回值的类型、属性的类型无法确定此时可以泛型2、基本使用下例中test 函数参数类型不确定但是能确定的是其参数的类型和返回值的类型是相同的由于类型不确定所以参数和返回值均使用了 any但是这样做会关闭 TS 的类型检查其次也不能体现出参数和返回值是相同类型functiontest(arg:any):any{returnarg;}使用泛型// 方式一直接使用// 使用时可以直接传递参数类型会由 TS 编译器自动推断出来但有时编译器无法自动推断test(10);// 方式二指定类型// testnumber(hello); // 类型不符则报错testnumber(100);可以同时指定多个泛型使用逗号隔开functiondemoT,K(a:T,b:K):K{returnb;}demonumber,string(10,hello);在类中使用泛型classMyClassT{prop:T;constructor(prop:T){this.propprop;}}泛型范围约束下例中的泛型 T 必须是 MyInter 的子类interfaceMyInter{length:number;}classSelfInterimplementsMyInter{constructor(publiclength:number){}}functionrunTextendsMyInter(arg:T):number{returnarg.length;}console.log(runSelfInter(12345));// 5
企业数字化 ERP 产品动态
相关推荐
Armbian换源全指南:apt源与armbian.list正确配置,告别404和慢速 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 6:51:12
基于STM32的平衡球PID控制实战:从硬件选型到参数整定 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 6:51:00
TMS320F280049开发选型指南:C2000Ware与MotorControl SDK深度对比 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 6:50:42
高速铁路静态验收全流程解析:从规范到现场执行要点 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 7:39:45
从零搞懂 MCP:MCP协议、MCP 服务、Tool 到底谁是谁? 最近 AI 圈里 “MCP” 出现的频率越来越高,但能把它一次讲清的材料并不多。我将用四张图回答四个问题:MCP 是什么?MCP 服务是什么?它和 Tool 是什么关系?我们日常使用的workbuddy中看到的那些"连接器"算不算… · 2026/9/24 7:39:45
Erlang/OTP 嵌入式系统守护利器:run_erl 命令完全指南 编程语言语言运行时标准库编译器并发编程 【免费下载链接】otp Erlang/OTP 项目地址: https://gitcode.com/gh_mirrors/ot/otp 点击查看 免费下载 导读
run_erl 是 Erlang/OTP 运行时系统(ERTS)中面向 Unix 系统的核心工具,负责… · 2026/9/24 7:39:39
第 17 章 · 编排 AI 流程:StateGraph 节点、条件边与意图路由 版本:LangGraph4j 1.8.25目标:在 StateGraph 上加节点、普通边、条件边,跑通一张意图三路分支图。本章不接模型;classify 用规则写死,只练拓扑。StateGraph 是可变蓝图:挂 schema、节点、边,再 … · 2026/9/24 7:39:27
Flink Working Directory 完全指南:进程工作目录配置与跨重启本地恢复实战 大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 Working Directory(工作目录)是 Flink 为 JobManager 与 TaskManager 进程提供的本地持久化目录,用于… · 2026/9/24 7:39:08
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44