TS中的类

目录

ES6的类

类的概念

类的构成

类的创建

声明

      构造函数

定义内容

创建实例

TS中的类

类声明

构造函数

属性和方法

实例化类

继承

访问修饰符

public

private

protected

成员访问修饰符的使用原则

访问器

只读成员与静态成员

readonly

static

修饰符总结


首先要理解ES6中的类

ES6的类

类的概念

在 ES6 中,类是引入的一种新的语言特性,用于实现面向对象编程的概念。类是一种模板,用于创建具有相同属性和方法的对象。可以使用 class 关键字声明一个类

类由类名、构造函数(constructor)和类方法(methods)组成。类名可以是任何有效的标识符,构造函数由 constructor 关键字和函数体组成,类方法可以包括任何有效的函数代码。

当创建对象实例时,构造函数会被自动调用。类方法可以通过对象实例来调用,

类具有以下特性:

  • 继承(Inheritance):子类可以继承父类的属性和方法。
  • 封装(Encapsulation):通过使用访问修饰符(public、private、protected)来限制对象属性的访问权限。
  • 多态(Polymorphism):同一类型的对象可以具有不同的表现形式。

ES6 中的类是基于原型链实现的,实质上仍然是以函数的形式存在,只是语法简洁了许多,更接近于其他 OOP 语言的实现方式,使得 JS 的面向对象编程更加直观和易于维护。

类的构成

一个类由以下几个组成部分构成:

1. 类名(Class Name):类名用于标识类的名称,通常采用首字母大写的驼峰命名规则。

2. 构造函数(Constructor):构造函数是类中的一种特殊方法,用于初始化对象的属性。构造函数使用 `constructor` 关键字定义,在创建类的实例时被自动调用。

3. 属性(Properties):类的属性用于描述类对象的状态。属性可以是类内部的数据,也可以是直接定义在类上的静态属性。在类中定义属性时,可以使用访问修饰符(public、private、protected)来限制属性的访问权限。

4. 方法(Methods):类的方法被用于定义对象的行为。方法定义在类的内部,可以通过类的实例来调用。方法可以是类的实例方法,也可以是类上的静态方法。

5. 继承(Inheritance):通过继承,一个类可以派生出子类,并从父类继承属性和方法。子类可以覆盖父类的方法或添加新的属性和方法。

6. 访问修饰符(Access Modifiers):访问修饰符用于控制类的成员的访问权限。ES6 提供了三种访问修饰符:public、private 和 protected。public 表示公开的,可以在类的内部和外部访问;private 表示私有的,只能在类的内部访问;protected 表示受保护的,可以在类的内部和派生类中访问。

类是面向对象编程的核心概念,它提供了一种结构化的方式来组织代码,并且使代码更具可维护性和可扩展性。

类的创建

在 ES6 中,创建一个类的基本语法是使用 class 关键字,然后定义类名和类的内容。以下是创建类的一般步骤:

声明

        使用 class 关键字声明一个类,并给类取一个合适的名称:

class ClassName {// 类的内容
}

      构造函数

 在类的内部定义构造函数(constructor):构造函数用于初始化对象的属性,在创建类的实例时自动调用。构造函数使用 constructor 关键字声明,可以接受参数用于初始化属性:

class ClassName {constructor(param1, param2) {// 构造函数的代码this.property1 = param1;this.property2 = param2;}
}

定义内容

在类的内部定义其他方法:除了构造函数外,你可以在类的内部定义其他方法,用于描述对象的行为。方法的定义与普通函数类似,不过不需要使用 function 关键字:

class ClassName {constructor(param1, param2) {// 构造函数的代码this.property1 = param1;this.property2 = param2;}method1() {// 方法代码}method2() {// 方法代码}
}

创建实例

使用 new 关键字创建类的实例:通过 new 关键字后跟类名,可以创建类的一个实例:

const instance = new ClassName(param1, param2);

这样就创建了一个类的实例,可以使用实例对象来调用类的方法和访问属性。

以上是创建一个简单的类的步骤,你可以根据需要在类中添加更多的属性和方法。同时还可以使用继承等特性来进行功能的扩展。

TS中的类

在 TypeScript 中,类(Class)是面向对象编程的基本概念之一,用于创建对象并定义对象的属性和方法。它提供了一种结构化的方式来组织代码和数据,并支持面向对象的特性,如继承、封装和多态。

类声明

使用 class 关键字声明一个类,并给类取一个合适的名称。

class ClassName {// 类的内容
}

构造函数

类可以定义一个特殊的方法叫做构造函数(constructor),用于初始化对象的属性。构造函数在创建类的实例时自动调用,并且可以接受参数用于初始化属性。

class ClassName {constructor(param1: Type, param2: Type) {// 构造函数的代码this.property1 = param1;this.property2 = param2;}
}

属性和方法

类可以定义属性和方法来描述对象的属性和行为。属性可以存储数据,而方法定义了对象可以执行的操作。属性和方法的声明语法与 JavaScript 类似。

class Person {// 声明  属性name:string;age:number;// 通过构造函数对属性进行初始化constructor(name:string, age:number) {this.name = name;  //this指的是当前person实例this.age = age;}showName() {console.log(this.name);}showAge() {console.log(this.age)}
}let p = new Person('zs', 20);
p.showName();

实例化类

通过 new 关键字后跟类名,可以创建类的一个实例。实例化类时,会自动调用构造函数。

const instance = new ClassName(value1, value2);

继承

类支持继承机制,子类可以继承父类的属性和方法,并可以添加自己的属性和方法。使用 extends 关键字实现继承关系。

super关键字

  • super 关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数

子类的特有属性在super后

class Person { // 父类uname:string;constructor(uname:string){this.uname = uname;} 
}
class Student extends Person { // 子类继承父类age:number;constructor(uname:string,age:number){super(uname); // 调用父类的constructor(uname)this.age = age; // 定义子类独有的属性} 
}

访问修饰符

在 TypeScript 中,访问修饰符是用于限制类成员(属性和方法)访问权限的关键字。它们可以控制外部代码对类成员的访问级别,提供了封装和信息隐藏的特性。TypeScript 提供了三种访问修饰符:public、private 和 protected。

默认情况下,类成员是 public 的(可以被任何地方访问)。

private 成员只能在类内部访问

protected 成员可以在类及其子类中访问。

public

默认的访问修饰符,即使不显式指定访问修饰符,类成员也会被认定为 public。public 成员可以在类内部、子类和类的外部被访问。

class Person {// 属性public name:string;// age也是公有属性,没加public默认就是public  age:number;// 通过构造函数对属性进行初始化constructor(name:string, age:number) {this.name = name;this.age = age;}showName() {console.log(this.name);}showAge() {console.log(this.age)}
}let p = new Person('zs', 20);
console.log(p.name) // zs
p.name = 'lisi';
console.log(p.name) // lisi
private

private 访问修饰符用于限制成员只能在类内部访问,无法在类的外部或子类中进行访问。

class Person {// 属性private age:number = 20;showAge() {console.log(this.age)}
}let p = new Person();
console.log(p.age) // error: Property 'age' is private and only accessible within class 'Person'
protected

protected 访问修饰符限制成员可以在类内部和子类中访问,但不能在类的外部进行访问。

成员访问修饰符的使用原则
  • 最小化原则,能用private的绝对不用public和protected
  • 我们最好把所有的属性都设置为私有属性,方法可以是公有的
  • 如果确实需要在类的外部访问类内部的属性,那么我们也是以方法的形式访问我们类内部的属性,而不是直接访问

访问器

在ts中为我们提供了访问器,可以使我们更加方便的访问类内部的属性

class Person {private _name:string;age:number;constructor(name:string,age:number){this._name = name; //this指的是当前person实例this.age = age //给name和age属性赋值,赋值前要先声明}showName(){console.log(this._name);}get name(){  //通过get访问器来获取name的值return this._name}set name(value:string){  //通过set访问器来获取name的值this._name = value}}const y = new Person('uu',80)
console.log(y.name);   // =>'uu'
y.name='ww'
console.log(y.name); // =>'ww'
y.showName()  // =>'ww'

只读成员与静态成员

  • 只读成员:在类的成员前面加上readonly,那么这个成员就属于只读成员
  • 静态成员:在类的成员前面加上static,那么这个成员就属于静态成员。静态成员只有类才可以访问。
  • 实例成员:实例成员就是只有类的实例才能够访问的成员
readonly

只能在声明属性的时候进行赋值,或者在constructor构造函数中进行赋值

// 有什么用----设计图纸
class Person {readonly name:string; // 静态成员// 构造函数constructor(name:string) {this.name = name;}// 方法(函数)showName() {// 在函数中要项访问属性的话,必须在属性前面加上thisconsole.log(this.name)}
}// 把类进行实例化
let p = new Person('zs')console.log(p.name)
static

静态成员

class Person {readonly name:string;  //只读,在类内部也不能修改age:number; static height :number //静态成员,只能在类内部访问属性和方法,实例不可以constructor(name:string,age:number,height:number){this.name = name; this.age = age Person.height=height  //静态成员}showName(){console.log(this.name);}   }const p = new Person('aa',20,180)console.log(Person.height);

如果使用this访问,会出现以下提示 

修饰符总结
  • 只读修改符readonly和静态修饰符static可以混用,但是必须是先是static再是readonly
  • 成员修饰符(public、private、protected)和只读修饰符readonly、静态修饰符static混用,必须是成员修饰符在前,只读修饰符和静态修饰符在后
  • 成员修饰符之间不能用混用

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

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

相关文章

C#高级 10 Linq操作

1.Linq操作介绍 Linq操作是C#集成的类似于数据库语言的操作,是通过将数据库的表名映射为类,把数据库的列名映射为属性。 Linq查询主要分为3类:Linq to object(数组、list集合) --内存里面的数据 Linq to sql(查询数据库用的) --在数据库数据…

C# OpenCvSharp DNN FreeYOLO 人脸检测人脸图像质量评估

目录 效果 模型信息 yolo_free_huge_widerface_192x320.onnx face-quality-assessment.onnx 项目 代码 frmMain.cs FreeYoloFace FaceQualityAssessment.cs 下载 C# OpenCvSharp DNN FreeYOLO 人脸检测&人脸图像质量评估 效果 模型信息 yolo_free_huge_widerfa…

北斗短报文技术在灾区通讯救援中的应用与价值

北斗短报文技术在灾区通讯救援中的应用与价值 随着全球化的进程和科技的快速发展,人类社会在取得巨大经济成果的同时,也面临了许多自然灾害的挑战。地震、洪水、台风等天灾频繁发生,严重威胁着人们的生命财产安全。灾害发生时,及…

Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

一、前言 设置旋转角度,相对来说是一个比较小众的需求,如果视频本身带了旋转角度,则解码播放的时候本身就会旋转到对应的角度显示,比如手机上拍摄的视频一般是旋转了90度的,如果该视频文件放到电脑上打开,…

Zabbix“专家坐诊”第223期问答汇总

来源:乐维社区 问题一 Q:Zabbix 5.0安装完mysql之后怎么备份?忘记mysql当时创建的密码了,怎么样能查看设置的密码? A:mysql初始化密码在 /var/log/mysqld.log中可以看到,搜关键字temporary pas…

Python爬虫基础:使用Scrapy库初步探索编程零基础可以学么?

Scrapy是Python中最流行的网页爬虫框架之一,强大且功能丰富。通过Scrapy,你可以快速创建一个爬虫,高效地抓取和处理网络数据。在这篇文章中,我们将介绍如何使用Scrapy构建一个基础的爬虫。 一、Scrapy简介及安装 Scrapy是一个用…

【Python】 python简介开发环境

1. python简介 Python是由荷兰人吉多范罗苏姆 (Guido von Rossum,后面称呼为Guido,"龟叔“)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户群体的编程语言。 (1).Python的历史 1.1989年圣诞节:Guido开始写Python语言的编译器。 2.1991年…

2024年中职网络安全——Windows操作系统渗透测试(Server2105)

Windows操作系统渗透测试 任务环境说明: 服务器场景:Server2105服务器场景操作系统:Windows(版本不详)(封闭靶机)需要环境加Q 目录 1.通过本地PC中渗透测试平台Kali对服务器场景进行系统服务…

JUC Lock 读写锁

文章目录 ReentrantReadWriteLock^1.5^ 读写锁ReentrantReadWriteLock 继承关系图示例 1示例 2先获取读锁再获取写锁先获取写锁再获取读锁锁降级 总结 StampedLock^1.8^ (邮戳锁)基本使用示例1示例2示例3StampedLock 源码文档上的示例 ReentrantReadWrit…

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中,运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符,以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…

虽迟但到!MySQL 可以用 JavaScript 写存储过程了!

任何能用 JavaScript 来干的事情,最终都会用 JavaScript 来干 背景 不久前,Oracle 在 MySQL 官方博客官宣了在 MySQL 中支持用 JavaScript 来写存储过程。 最流行的编程语言 最流行的数据库。程序员不做选择,当然是全都要。 使用方法 用 J…

TikTok年度消费价值洞察:捕获跨境电商新机遇

2023年无疑是充满变化和挑战的一年,TikTok落地全球的过程十分坎坷,从曾经被封杀禁停的低迷,到现在重启复苏的大快人心,可谓是“柳暗花明又一村”。 在TikTok全球市场逐渐回暖的情况下,各国民众消费信心得到提振&#x…