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…

字节大佬含泪吐血总结系列之 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…

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

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

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

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

2024美赛C题完整解题教程 网球运动势头(持续更新)

2024美赛已经于今天早上6点准时公布题目。本次美赛将全程跟大家一起战斗冲刺O奖!思路持续更新。 2024 MCM Problem C: Momentum in Tennis (网球运动的势头) 注:在网球运动中,"势头"通常指的是比赛中因一系…

为客户解决痛点,电子纸增加制表功能

为客户解决痛点,电子纸增加制表功能 部分客户购买我们的电子纸后反馈效果很好,但是在配套组态软件制作电子纸模板时,遇到需要制作表格的时候比较麻烦。像是在画板作画一样,比较费时,而且效果不是很好,没办…

机器学习算法决策树

决策树的介绍 决策树是一种常见的分类模型,在金融风控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先询问男方是否有房产&a…

2024.2.1日总结

web的运行原理: 用户通过浏览器发送HTTP请求到服务器(网页操作)。web服务器接收到用户特定的HTTP请求,由web服务器请求信息移交给在web服务器中部署的javaweb应用程序(Java程序)。启动javaweb应用程序执行…