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.hqwc.cn/news/448214.html

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

相关文章

数据结构+算法(第03篇):KO!大O——时间复杂度

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

C++进阶--多态

概念 多态是面向对象编程中的一个重要概念,它允许不同类型的对象对同一个消息做出不同的响应。具体的来说,当相同的消息传递给不同的对象时,这些对象能够以不同的方式进行处理,从而产生不同的行为。 对于多态的实现,…

开源MES/免费MES,提升生产效率的最佳选择

开源MES系统为企业提供了一个灵活、经济的选择。企业可以根据自身需求选择合适的开源MES系统,并进行定制开发,可以节约不少成本。开源MES系统的出现,促进了整个制造业的创新和发展,有助于企业提高运营效率和竞争力。今天介绍一款市…

面试中问到的算法题。————目录树生成

前言 我在面试中遇到了算法题,也是我第一次面试,也不知道是太紧张了还是太久没刷算法题了,感觉压有点懵的状态,所以当时面试的时候没有做出来或者说只做了一半没有做完。 面试完成后,我又重新审视了一下题目&#xff…

混乱字母排序——欧拉路数论

题目描述 小明接到一个神秘的任务:对于给定的 n 个没有顺序的字母对(无序代表这两个字母可以前后顺序颠倒,区分大小写)。请构造一个有 (n1) 个字母的混乱字符串使得每个字母对都在这个字符串中出现。 输入输出格式 输入格式 第…

2023年06月CCF-GESP编程能力等级认证Python编程四级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A:编辑 B:保存 C:调试 D:编译 答案:D 第2题 排序算法是稳定的(Stable Sorting),就是指排序算…

iOS pod sdk开发到发布,记录

本文章记录从开发sdk到发布cocopod的问题和流程,省的每次都忘还得重新查 1:pod lib create (sdk名称) 命令创建 工程结构,然后根据命令行提示进行选择. What platform do you want to use?? [ iOS / macOS ]。~》 iOS What language do you want to use?? [ Swift / Obj…

鸿蒙开发有必要学吗?看完这篇再决定吧

在科技的潮流中,每一次新操作系统的诞生都是对旧秩序的挑战与新机遇的孕育。鸿蒙操作系统的出现,无疑是近年来科技界最引人注目的事件之一。自华为于2019年正式推出鸿蒙系统以来,这一我们自主研发的操作系统不仅在国内引起巨大反响&#xff0…

解决ModuleNotFoundError: No module named ‘pysqlite2‘

目录 一、问题描述 二、问题分析 三、解决方法 四、参考文章 一、问题描述: 新建conda编译环境。安装Jupyter后打不开,报错: 二、问题分析: 缺少sqlite3动态链接库 三、解决方法: SQLite Download Page 下载…

力扣461. 汉明距离(位运算)

Problem: 461. 汉明距离 文章目录 题目描述思路复杂度Code 题目描述 思路 Problem: 力扣191. 位1的个数(位运算) 该题只需要在上题的基础上先对两个数进行一次异或操作即可 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( 1 ) O(1) O(1) Code …

【LeetCode】每日一题 2024_2_2 石子游戏 VI(排序、贪心)

文章目录 LeetCode?启动!!!题目:石子游戏 VI题目描述代码与解题思路 LeetCode?启动!!! 题目:石子游戏 VI 题目链接:1686. 石子游戏 VI 题目描述…

Linux - iptables 防火墙

一. 安全技术和防火墙 1.安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全…