TypeScript(十一) 类、对象

1. 类

1.1. 简介

  TypeScript是面向对象的JavaScript。
  类描述了所创建的对象共同的属性与方法。

1.2. 类的定义

class class_name { // 类作用域
}

(1)定义类的关键字是class,后面紧跟类名,类可以包含以下几个模块:
(2)字段 – 字段是类里面声明的变量。字段表示对象的有关数据。
构造函数 – 类实例化时调用,可以为类的对象分配内存。
(3)方法 – 方法为对象要执行的操作。
实例:

class Car { // 字段 engine:string; // 构造函数 constructor(engine:string) { this.engine = engine }  // 方法 disp():void { console.log("发动机为 :   "+this.engine) } 
}

1.3. 创建实例化对象

  我们使用new 关键字来实例化类的对象,语法:

var object_name = new class_name([ arguments ])

  类实例化时会调用构造函数,如调用上面Car类:

var obj = new Car("Engine 1")

  类中的字段属性和方法可以使用.号来访问:

// 访问属性
obj.field_name  
// 访问方法
obj.function_name()

完整实例:

class Car { // 字段engine:string; // 构造函数constructor(engine:string) { this.engine = engine }  // 方法disp():void { console.log("函数中显示发动机型号  :   "+this.engine) } 
} 
// 创建一个对象
var obj = new Car("XXSY1")
// 访问字段
console.log("读取发动机型号 :  "+obj.engine)  
// 访问方法
obj.disp()

执行结果:
读取发动机型号 : XXSY1
函数中显示发动机型号 : XXSY1

1.4. 类的继承

  TypeScript 支持继承类,即我们可以在创建类的时候继承一个已存在的类,这个已存在的类称为父类,继承它的类称为子类。
  类继承使用关键字 extends,子类除了不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承。
  TypeScript 一次只能继承一个类,不支持继承多个类,但 TypeScript 支持多重继承(A 继承 B,B 继承 C)。
语法格式如下:

// An highlighted block
class child_class_name extends parent_class_name

  实例(类的继承:实例中创建了 Shape 类,Circle 类继承了 Shape 类,Circle 类可以直接使用 Area 属性:):

class Shape { Area:number   constructor(a:number) { this.Area = a } 
}  
class Circle extends Shape { disp():void { console.log("圆的面积:  "+this.Area) } 
}
var obj = new Circle(223); 
obj.disp()

执行结果:圆的面积: 223

1.5. static关键字

  static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。
实例:

class StaticMem {  static num:number; static disp():void { console.log("num 值为 "+ StaticMem.num) } 
} StaticMem.num = 12     // 初始化静态变量
StaticMem.disp()       // 调用静态方法

执行结果:num 值为 12

1.6. instanceof 运算符

  instanceof 运算符用于判断对象是否是指定的类型,如果是返回 true,否则返回 false。

class Person{ } 
var obj = new Person() 
var isPerson = obj instanceof Person; 
console.log("obj 对象是 Person 类实例化来的吗? " + isPerson);

执行结果:
obj 对象是 Person 类实例化来的吗? True

1.7. 访问控制修饰符

  在TypeScript中,可以使用访问控制符来保护类、变量、方法和构造方法的访问。支持一下3种不同的访问权限:
(1)public(默认) : 公有,可以在任何地方被访问。
(2)protected : 受保护,可以被其自身以及其子类访问。
(3)private : 私有,只能被其定义所在的类访问。
实例:

class Encapsulate { str1:string = "hello" private str2:string = "world" 
} 
var obj = new Encapsulate() 
console.log(obj.str1)     // 可访问 
console.log(obj.str2)   // 编译错误, str2 是私有的

   以下实例定义了两个变量 str1 和 str2,str1 为 public,str2 为 private,实例化后可以访问 str1,如果要访问 str2 则会编译错误。

1.8. 类和接口

   类可以实现接口,使用关键字 implements,并将 interest 字段作为类的属性使用。
   以下实例中 AgriLoan 类实现了 ILoan 接口:

interface ILoan { interest:number 
}  
class AgriLoan implements ILoan { interest:number rebate:number constructor(interest:number,rebate:number) { this.interest = interest this.rebate = rebate } 
} 
var obj = new AgriLoan(10,1) 
console.log("利润为 : "+obj.interest+",抽成为 : "+obj.rebate )

执行结果:
利润为 : 10,抽成为 : 1

2. 对象

2.1. TypeScript对象是包含一组键值对的实例。值可以是标量、函数、数组、对象等

  如下实例:

var object_name = { key1: "value1", // 标量key2: "value",  key3: function() {// 函数}, key4:["content1", "content2"] //集合
}

实例:

 var sites = { site1:"Harmony", site2:"Android" }; // 访问对象的值console.log(sites.site1) console.log(sites.site2)

执行结果:
在这里插入图片描述

2.2. 类型模版

  我们定义一个对象:

var sites = {
name1:“Android”;
name2:“Java”;
};

  这时如果我们想在对象中添加方法,可以使用以下方法:

sites.sayHello = function(){return “hello”;};

  如果在代码中使用上述方法则会出现编译错误,因为TypeScript中的对象必须是特定类型的实例。
正确实例:

   var sites = {name1: "Harmony",name2: "eTS",sayHello: function () { } // 类型模板};sites.sayHello = function () {console.log("hello " + sites.name1);};sites.sayHello();

执行结果:
在这里插入图片描述
  对象也可以作为第一个参数传递给函数,如下:

var sites = { site1:"Harmony", site2:"eTS",
}; 
var invokesites = function(obj: { site1:string, site2 :string }) { console.log("site1 :"+obj.site1) console.log("site2 :"+obj.site2) 
} 
invokesites(sites)

执行结果:
site1 :Harmony
site2 :eTS

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

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

相关文章

PHP基础语法(上)

目录 前言 一、基础语法 1.1 标记 1.2 输出语句 1.2.1 echo 1.2.2 print 1.3 注释 1.3.1 单行注释 1.3.2 多行注释 1.4 标识符 1.5 关键字 二、数据与运算 2.1 常量 2.1.1 常量的定义和使用 2.1.2 预定义常量 2.2 变量 2.2.1 变量的赋值 2.2.2 超全局变量 2.3 数据类型 2.3.1 …

【2024美赛E题】985博士解题思路分析(持续更新中)!

【2024美赛E题】985博士解题思路分析! 加群可以享受定制等更多服务,或者搜索B站:数模洛凌寺 联络组织企鹅:936670395 以下是E题老师的解题思路(企鹅内还会随时更新文档): 2024美赛E题思路详解…

[网络安全] IIS----WEB服务器

一、 WEB服务器 WEB服务器 也叫网页服务器和 HTTP服务器使用协议: HTTP(端口:80) 或 HTTPS(端口443)浏览器:HTTP客户端网站: 一个或多个网页组成的集合 二、HTTP和HTTPS协议: HTTP : 是 HyperText Transfer Protocol(超文本传输协议)的简写,…

【CSS】css选择器和css获取第n个元素(:nth-of-type(n)、:nth-child(n)、first-child和last-child)

:nth-of-type、:nth-child的区别 一、css选择器二、:nth-of-type、:nth-child的区别:nth-of-type(n):选择器匹配属于父元素的特定类型的第N个子元素:nth-child(n):选择器匹配属于其父元素的第 N 个子元素,不论元素的类型:first-child&#xf…

开发板 串口回环测试

获取串口号 ls /dev/tty*查看串口信息 stty -F /dev/ttyS5设置串口 stty -F /dev/ttyS5 speed 115200stty -F /dev/ttyS5 cs8 -parenb -cstopb -echo测试 # 将串口的TXRX短接,然后进行收发测试 # 后台接收数据,前台执行发送 cat /dev/ttyS5 & ec…

字节大佬含泪吐血总结系列之 ARP 协议详解(网络层)

字节大佬含泪吐血总结系列之 ARP 协议详解(网络层) 原文地址:https://github.com/Snailclimb/JavaGuide 文章目录 字节大佬含泪吐血总结系列之 ARP 协议详解(网络层)MAC 地址ARP 协议工作原理同一局域网内的 MAC 寻址不同局域网内的 MAC 寻址 每当我们学习一个新的…

帅气的性能监控平台Grafana(Windows下使用Grafana监控系统指标与GPU指标)

帅气的性能监控平台Grafana(Windows下使用Grafana监控系统指标与GPU指标) 前情提要 系统环境准备 windows_exporter下载 nvidia_gpu_exporter下载 prometheus下载 Grafana下载 安装指导 windows_exporter安装与nvidia_gpu_exporter安装 promethe…

vscode 如何修改c/c++格式化风格,大括号不换行

在Visual Studio Code(VSCode)中,若要修改C代码格式化的风格以实现大括号不换行,通常会借助于插件C/C扩展中的ClangFormat配置。以下是具体的步骤: 确保已安装了C/C扩展: 打开VSCode的扩展市场(…

最新AI系统ChatGPT网站H5系统源码,支持Midjourney绘画局部编辑重绘,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

学习笔记 | 微信小程序项目day01

今日学习内容 如何创建一个uni-app项目如何运行到微信微信开发者工具如何申请小程序appid如何配置tabBar轮播图demo 如何创建uni-app项目 使用HBuilder X 创建 如何运行到微信微信开发者工具 1、安装uni-app vue3 编译器 插件 2、安装微信开发者工具 微信开发者工具下载地址…

annoy,一个超强的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超强的 Python 库 - annoy。 Github地址:https://github.com/spotify/annoy 在大数据时代,处理高维数据集的需求越来越迫切,尤其是在机器学习、推荐系统和自…

JS 异常处理

1、抛出异常 throw 1.throw抛出异常信息,程序也会终止执行 2.throw后面跟的是错误提示信息 3.Error对象配合 throw使用,能够设置更详细的错误信息 示例 function fn(x, y) {if (!x || !y) {throw new Error(没有参数传进来) }return x y } fn()打印结果…

基于LlamaIndex解决RAG的关键痛点

受到 Barnett 等人的论文《Seven Failure Points When Engineering a Retrieval Augmented Generation System》的启发,本文将探讨论文中提到的七个痛点,以及在开发检索增强型生成(RAG)流程中常见的五个额外痛点。更为关键的是&am…

Camera2+OpenGL ES+MediaCodec+AudioRecord实现录制音视频写入H264 SEI数据

记录一下学习过程,得到一个需求是基于Camera2OpenGL ESMediaCodecAudioRecord实现录制音视频。 需求: 在每一帧视频数据中,写入SEI额外数据,方便后期解码时获得每一帧中的自定义数据。点击录制功能后,录制的是前N秒至…

AI实践于学习3_大模型之AI解题提示词优化实践

前言 提示词只是让LLM具有一定的推理能力,并不能直接提高模型能力,可以借助CoT思维链、提示词规则一定程度微调模型。 尽量使用新模型,通用性能更好,支持提示词规则更多。 参考 https://www.rgznbk.com/archives/Prompt-Engin…

海外社媒营销平台及运营规则,如何降低封号率?

社交媒体已经成为人们生活和日常习惯不可或缺的一部分,在跨境电商出海过程中,海外社媒营销平台可以起到非凡的助力;而平台的选择以及平台的运营技巧、规则都各有不同。很多海外社媒工作者经常会被封号,这也是难度之一,…

韦达定理用处多

文章目录 前言一、一元二次方程中根和系数之间的关系二、韦达定理的数学推导和作用1. 韦达定理的数学推导2. 韦达定理的作用 三、韦达定理的应用举例1. 解题示例12. 解题示例23. 解题示例34. 解题示例45. 解题示例56. 解题示例67. 解题示例7 总结 前言 韦达定理说明了一元n次方…

2024年沼渣外运及处置服务采购项目招标公告

2024年沼渣外运及处置服务采购项目招标公告 (招标编号:FG2400770097A) 项目所在地区:重庆市 一、招标条件 本2024年沼渣外运及处置服务采购项目已由项目审批/核准/备案机关批准,项目资金来源为国有资金1664万元,招标人为重庆渝环生…

2024美赛数学建模C题思路分析 - 网球的动量

1 赛题 问题C:网球的动量 在2023年温布尔登绅士队的决赛中,20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来首次在温布尔登公开赛失利,并结束了他在大满贯赛事中历史上最伟大的球员之一的非凡表…

座舱内四分音区识别技术的浅谈

座舱内四分音区识别技术的创新主要体现在以下几个方面: 声源定位更精确:四分音区技术可以将座舱进一步细分为四个区域,包括驾驶员、副驾、后排左侧和后排右侧。这种更精确的声源定位技术可以帮助更好地识别不同位置的说话者,提高…