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() {
    // 在函数中要项访问属性的话,必须在属性前面加上this
    console.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混用,必须是成员修饰符在前,只读修饰符和静态修饰符在后
  • 成员修饰符之间不能用混用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

remote-ssh如何离线下载历史版本

remote-ssh离线下载任意历史版本方法,简单有效 很多小伙伴都会遇到这样的问题,由于内网服务器中安装的vs code版本较低,比如1.62.0版本,官网发布的version history 只展示最新的五个版本,还是太高了,导致下…

TypeScript 和 jsdom 库创建爬虫程序示例

TypeScript 简介 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,可以编译生成纯 JavaScript 代码。TypeScript 增加了可选的静态类型和针对对象的编程功能,使得开发更加大规模的应用容易。 jsdom 简介 jsdom 是一个…

VS中打开ui文件闪退

解决办法: 依次点击《扩展》-> 《Qt vs tools》-> 《options》-> 《Qt》-> 《general》 -> 《Qt Designer》 -> 《run in detached window》 -> true

用Java编写图书网站信息采集程序教程

目录 一、准备工作 二、分析目标网站结构 三、选择信息采集方式 四、安装Jsoup库 五、编写信息采集程序 六、注意事项 总结: 编写图书网站信息采集程序需要掌握HTML、CSS、JavaScript、Java等前端和后端技术。下面是一个简单的教程,介绍如何使用…

游戏开发中,你的游戏图片压缩格式使用ASTC了吗

文章目录 ASTC原理:使用要求 ASTC(Adaptive Scalable Texture Compression,自适应可伸缩纹理压缩)是一种高级的纹理压缩技术,由ARM公司开发并推广。它在图形处理领域中因其出色的压缩效率和灵活性而受到广泛关注。 AST…

上门洗衣洗鞋小程序多门店管理模式是怎么样的

做干洗店和洗鞋店的老板们很多都不止一个门店,多门店的管理模式下,去做一个上门洗衣洗鞋小程序,需要有哪些必要的功能才能让不同的门店管理起来不乱呢。首先需要先确定一下不同门店的管理都会面临哪些经营场景和需求。 第一,加盟店…

【前端素材】bootstrap4实现服装鞋饰电商平台Doron

一、需求分析 一个服装鞋饰电子商务页面是一个在线平台,用于展示和销售各种服装、鞋子和配饰产品。它通常具有以下功能: 产品展示:服装鞋饰电子商务页面会展示各种服装、鞋子和配饰产品的图片、描述和价格。这些产品可以按照不同的分类&#…

FreeRTOS学习总结(二)FreeRTOS任务创建和删除API函数

实现动态创建任务流程 任务控制块结构体成员介绍 typedef struct tskTaskControlBlock {volatile StackType_t * pxTopOfStack; /* 任务栈栈顶,必须为TCB第一个成员 */ListItem_t xStateListItem; /* 任务状态列表项 */ Li…

免费IDEA插件推荐:Apipost-Helper

IDEA插件市场中的API调试插件不是收费(Fast Request )就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用! 这款插件由Apipost团队开发的…

llama.cpp模型推理之界面篇

目录 前言 一、llama.cpp 目录结构 二、llama.cpp 之 server 学习 1. 介绍 2. 编译部署 3. 启动服务 4、扩展或构建其他的 Web 前端 5、其他 前言 在《基于llama.cpp学习开源LLM本地部署》这篇中介绍了基于llama.cpp学习开源LLM本地部署。在最后简单介绍了API 的调用方…

什么是API网关代理?

带有API网关的代理服务显着增强了用户体验和性能。特别是对于那些使用需要频繁创建和轮换代理的工具的人来说,使用 API 可以节省大量时间并提高效率。 了解API API(即应用程序编程接口)充当服务提供商和用户之间的连接网关。通过 API 连接&a…

【仙丹秘法】如何炼制一颗稳定的仙丹

提示词始终保持不变 1:收集素材 制作lora_v1 2: 制作lora_v1 产生 1个人物 含 你想要的服装 导入 pose_1 到 control 1 生成人物 (white_background:1.1),front view,1boy,blue sleeveless t-shirt,blue shorts,detailed eyes,best quality,masterpiece,high res…

蓝凌EIS智慧协同平台 UniformEntry.aspx sql注入漏洞

漏洞描述: 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台,覆盖OA、沟通、客户、人事、知识等管理需求,集合了非常丰富的模块,满足组织企业在知识、项目管理系统建设等需求的…

C语言基础语法跟练

题源&#xff1a;牛客网 1、输出"Hello Nowcoder!"。开始你的编程之旅吧。 #include <stdio.h>int main() {printf("Hello Nowcoder!");return 0; } 2、KiKi学会了printf在屏幕输出信息&#xff0c;他想输出一架小飞机。请帮他编写程序输出这架小…

解析游戏开发中的ECS设计模式:实体、组件、系统的完美协同

ECS&#xff08;Entity-Component-System&#xff09;是一种设计模式&#xff0c;通常用于构建和管理具有大量实体和复杂交互的系统&#xff0c;尤其在游戏开发中得到广泛应用。这个模式的核心思想是将系统中的组件、实体和系统进行分离&#xff0c;以提高代码的可维护性、可扩…

openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存

文章目录 openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存189.1 TPCC运行时&#xff0c;注入磁盘满故障&#xff0c;TPCC卡住的问题189.1.1 问题现象189.1.2 原因分析189.1.3 处理分析 189.2 备机处于need repair(WAL)状态问题189.2.1问题现象189.…

N5224B PNA 微波网络分析仪,900 Hz/10 MHz 至 43.5 GHz

01 N5224B PNA 微波网络分析仪 产品综述&#xff1a; Keysight N5224B PNA 微波网络分析仪&#xff08;10 MHz 至 43.5 GHz&#xff09;是一款灵活的综合测试引擎&#xff0c;能够测量放大器、混频器和变频器等有源器件。 这款分析仪的工作频率范围为 900 Hz 至 43.5 GHz。 …

【代码随想录】刷题笔记Day47

前言 又过了个愉快的周末~大组会终于不用开了&#xff0c;理论上已经可以回家了&#xff01;但是我多留学校几天吧&#xff0c;回家实在太无聊了&#xff0c;也没太多学习的氛围 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; dp[i]含义 考虑下标i&#xff08;包括…

密码学(二)

文章目录 前言一、Certificate Authorities二、Key Agreement Protocols 前言 本文来自 Intel SGX Explained 请参考&#xff1a;密码学&#xff08;一&#xff09; 一、Certificate Authorities 非对称密钥密码学中的公钥和私钥假设每个参与方都拥有其他参与方的正确公钥。…

【JAVA】final、finally、finalize 有什么区别?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 final&#xff1a; finally&#xff1a; finalize&#xff1a; 结语 我的其他博客 前言 在Java中&#xff0c;final、f…