详细版易学版TypeScript - 类

news2024/9/22 0:49:36

一、类 - 类的属性和方法

class MyPreson {
    // 类的属性
    // 属性需要在类里先定义并确定类型,才可以在constructor里面用this访问
    name: string
    age: number
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
    // 类的方法
    sendStr(str: string) {
        console.log("hi,", str); // hi, pinia
    }
}

const per = new MyPreson("vite", 123);
per.sendStr("pinia");

二、类 - 类的继承

class Father {
    name: string
    age: number
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
    changeName(str: string) {
        console.log("hello,", str);
    }
}
  1. 继承父类的方法:方式一

class Son1 extends Father {
    constructor(name: string, age: number) {
        // 调用父类的构造函数,使用super
        super(name, age);
    }
}
let son1 = new Son1("son1", 12);
// 继承父类的方法:方式一
// 子类没有changeName()方法,下面的代码是继承父类的changeName()方法
son1.changeName("son1->直接继承父类的方法"); // hello, son1->直接继承父类的方法

2、继承父类的方法:方式二

class Son2 extends Father {
    constructor(name: string, age: number) {
        super(name, age);
    }
    // 重写父类的方法
    changeName() {
        console.log("I am son2"); // I am son2
        // 继承父类的方法:方式二
        // 调用父类的方法,使用super
        super.changeName("son2->使用super继承父类的方法"); // hello, son2->使用super继承父类的方法
    }
}

let son2 = new Son2("son2", 12);
// 假如子类有changeName()方法,下面的代码是调用子类自己的changeName()方法
son2.changeName();

三、类 - 存取器

帮助我们控制对象成员的访问

1、设置存取器一

class Name1 {
    firstName: string
    lastName: string
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    // 设置存取器
    // 存取器的 get set 都是属性,不是方法,只不过这两个属性不是直接定义在类的对象上面
    // 其实就是对象上有这2个属性,但不是通过constructor构造器创建的,而是通过存取器创建的
    // 读取器:用来读取数据,控制对属性的访问
    get fullName() {
        // 这里返回了固定值,执行set后,读取到的永远是“张~月”
        return `张~月`;
    }
    // 设置器:设置数据
    set fullName(value) {
        const arr = value.split('~');
        this.firstName = arr[0];
        this.lastName = arr[1];
    }
}
const myName1 = new Name1("李", "明");
console.log("myName1-->", myName1);
// 访问myName的fullName
console.log("myName1.fullName-->", myName1.fullName); // 张~月
// 设置myName的fullName
myName1.fullName = "刘~敏";
console.log("myName1-->", myName1);
console.log("myName1.fullName-->", myName1.fullName); // 张~月

2、设置存取器二

class Name2 {
    firstName: string
    lastName: string
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    get fullName() {
        // 这里返回了动态数据,执行set后,读取到的就是set进去的数据
        return `${this.firstName}~${this.lastName}`;
    }
    set fullName(value) {
        const arr = value.split('~');
        this.firstName = arr[0];
        this.lastName = arr[1];
    }
}
const myName2 = new Name2("李", "明");
console.log("myName2-->", myName2);
console.log("myName2.fullName-->", myName2.fullName);
myName2.fullName = "刘~敏";
console.log("myName2-->", myName2);
console.log("myName2.fullName-->", myName2.fullName);

四、类 - 静态成员

类的静态属性和静态方法

也就是只属于类自己的属性和方法,只可以通过类自己去调用,不可以通过实例对象去调用

class StaticName {
    static myName: string
    constructor(myName: string) {
        StaticName.myName = myName;
    }
    static sayHi() {
        return "hi";
    }
}

const testName = new StaticName("test");
// console.log("testName.myName-->", testName.myName); // 报错
// console.log("testName.sayHi-->", testName.sayHi()); // 报错

console.log("StaticName.myName-->", StaticName.myName);
console.log("StaticName.sayHi-->", StaticName.sayHi());

五、类 - 修饰符

1、公有修饰符 public:类里面、子类、实例对象都能访问

2、私有修饰符 private:只能在类里面访问,子类、实例对象都不能访问

3、受保护的修饰符 protected: 只能在类里面及其子类中访问,实例对象不能访问

class MyFather {
    public test1: string // 公有属性
    private test2: string // 私有属性
    protected test3: string // 受保护的属性
    constructor(test1: string, test2: string, test3: string) {
        this.test1 = test1;
        this.test2 = test2;
        this.test3 = test3;
    }
    public myMethods1() { // 公有方法
        return this.test1; // 类里面可以访问自己的公有属性
    }
    private myMethods2() { // 私有方法
        return this.test2; // 类里面可以访问自己的私有属性
    }
    protected myMethods3() { // 受保护的方法
        return this.test2; // 类里面可以访问自己的受保护的属性
    }
}
const myFather1 = new MyFather("father hi", "father vite", "father pinia");
console.log(myFather1.test1); // 实例对象可以访问类的公有属性
// console.log(myFather1.test2); // 报错,实例对象不可以访问类的私有属性
// console.log(myFather1.test3); // 报错,实例对象不可以访问类的受保护的属性

class MySon extends MyFather {
    constructor(test1: string, test2: string, test3: string) {
        super(test1, test2, test3);
    }
    changeName1() {
        super.myMethods1(); // 子类可以访问父类的公有方法
    }
    changeName2() {
        // super.myMethods2(); // 报错,子类不可以访问父类的私有方法
    }
    changeName3() {
        super.myMethods3(); // 子类可以访问父类的受保护的方法
        console.log(this.test1); // 子类可以访问父类的公有属性
        // console.log(this.test2); // 报错,子类不可以访问父类的私有属性
        console.log(this.test3); // 子类可以访问父类的受保护的属性
    }
}

4、只读修饰符 readonly

// 只有在类的constructor构造函数里面可以修改
// 其他任何地方都不可以修改(包括类自己的方法内部、子类、实例对象都不可以修改)
class ReadOnly {
    readonly x: string
    constructor(x: string) {
        this.x = x;
    }
    readOnly() {
        // this.x = "hi" // 报错,类内部不可以修改只读属性
    }
}
const readOnly = new ReadOnly("hi");
// readOnly.x = "element plus"; // 报错,实例对象都不可以修改只读属性

5、属性修饰符的另一种书写方式

class Other {
    // 创建并初识化x参数,以下2种方式是等价的
    // 方式一:
    // readonly x:number
    // constructor(x:number){
    //     this.x = x;
    // }
    // 方式二:readonly定义在参数上
    constructor(readonly x:number){
    }
    // public、private、protected修饰符同理,也可以直接定义在参数上,这里省略举例
}
console.log(new Other(456));

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

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

相关文章

工业4.0时代来临,POWERLINK协议在千兆网卡下的性能

“工业 4.0”的高歌猛进, “智能制造”,“智慧工厂”的呼声越来越响亮。这些需求使得数据传输量越来越大,实时性越来越高,因此我们将 POWERLINK 从 100Mbps 升级到1000Mbps。测试下POWERLINK这种工业总线协议的性能,最…

jest基础指示

describ(类似java中的class,在这里定义的变量可以在所有it中使用) 针对某一方面的测试,一个描述性的东西,针对某一个方面的测试,或者说是一个作用域 一组测试用例的集合。 有两个参数,参数1 &…

Vue 3.0 学习笔记

Vue 3 学习笔记 文章目录 Vue 3 学习笔记[toc]一、初识vue3二、 常用Composition API(组合式API)**1. setup函数****2. ref函数****3. reactive函数****4. Vue3.0中的响应式原理****Vue2.x的响应式****Vue3.x的响应式** **5. reactivce对比ref****6. set…

为什么我在大厂待了三个月就选择离开?我聊聊应届生该选择大厂还是小公司

我在互联网大厂只待了3个月就离开了,主要原因不是大厂的福利或者薪资不够好,只是因为我发现在大厂里每天都有开不完的会,忙碌到没有自己的生活。当时我每天10点上班,晚上要工作到11甚至是12点,甚至半夜两三点都接到过工…

LangChain-Agents 入门指南

LangChain-Agents 入门指南 LangChain-Agents 入门指南注册 Serpapi运行高级 Agents API 测试运行 Google Search其它 Here’s the table of contents: LangChain-Agents 入门指南 LangChain是一个使用LLMs构建应用程序的工具箱,包含Models、Prompts、Indexes、Mem…

Vue3-黑马(二)

目录: (1)vue3-ref与reactive (2)vue3-基础-属性绑定与事件绑定 (3)vue3-基础-表单绑定 (1)vue3-ref与reactive ref函数可以把普通的数据变成响应式的数据&#xff0…

Firewall Testing Checklist 分析

不管是在服务器、云技术、嵌入式、车载等场景,防火墙的作用尤为重要,下面从信息收集、管理审核流程、操作系统安全、已实现规则和检查配置,这五个方面来进行分析firewall的具体作用和能力,然后提供一些实用的网络firewall工具给大…

【Spring框架全系列】SpringBoot配置文件相关操作

🌇哈喽,大家好,我是小浪。上篇博客我们已经学习了如何创建一个Spring项目,那么创建Spirng项目还可以直接通过在Spring官网的方式来创建,做法也非常的简单,感兴趣的小伙伴可以在C站搜个教程尝试一下&#xf…

22年广东河南省赛-隐藏信息探索

任务十: 1、访问服务器的FTP服务,下载图片QR,从图片中获取flag,并将flag提交; QR.png的内容如下,可以看到,找到二维码的前三块都被反转了,需要反转回来,把这个二维码做成一个正方形,使用截图工具分隔、配合画图工具拼接+旋转。平均分为4块,分出4个方块。即可。 2、…

django 基本使用

django 下载 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django查看版本 django-admin --version 4.2.1创建项目 django-admin startproject project创建一个 app python manage.py startapp app注册 app project/settings # app名称.apps.app名称Config…

2023河南省赛vp题解

目录 A题&#xff1a; B题 C题 D题 E题 F题 G题 H题 I题 J题 K题 L题 A题&#xff1a; 1.思路&#xff1a;考虑暴力枚举和双hash&#xff0c;可以在O(n)做完。 2.代码实现&#xff1a; #include<bits/stdc.h> #define sz(x) (int) x.size() #define rep(i,z,…

头歌计算机算法设计与分析:随机化算法

第1关&#xff1a;硬币实验 任务描述 相关知识随机数 编程要求 测试说明任务描述 本关任务&#xff1a;计算机产生的伪随机数来模拟抛硬币试验。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何获取数组的长度&#xff0c;2.如何遍历数组。 随机数 随机…

基于 SpringBoot+WebSocket 无DB实现在线聊天室

0 项目说明 0.1 样例展示 0.2 源码地址 GitHub&#xff1a;https://github.com/ShiJieCloud/web-chat Gitee&#xff1a;https://gitee.com/suitbaby/web-chat GitCode&#xff1a;I’m Jie / web-chat GitCode 1 WebSocket 简介 1.1 HTTP 常用的 HTTP 协议是一种无状态…

【牛客刷题专栏】0x27:JZ29 顺时针打印矩阵(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

2023年Pycharm安装教程,附详细图解

简介 PyCharm是一款Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如&#xff0c; 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外&#xff0c;该IDE提供了一些高级功能&a…

面向对象构造顺序与析构顺序详解

#include<bits/stdc.h> using namespace std;class animal{public:animal(){cout<<"调用animal构造"<<endl;}~animal(){cout<<"调用animal析构"<<endl;} };class verhical{public:verhical(){cout<<"调用verhica…

服装供应链管理包含哪些内容,如何选择服装供应链管理系统?

服装供应链管理是指对服装工厂的采购、生产、物流、仓储和销售等环节的管理&#xff0c;包括原材料的采购、成品的制造、配送、零售等多个环节。 选择合适的服装供应链管理系统&#xff0c;能够帮助服装工厂提高供应链管理的效率、优化库存管理、降低运营成本、保证服装生产的品…

TCP协议三次握手四次挥手详细分析

在学习TCP协议的时候&#xff0c;接触最多的就是TCP的三次握手和四次挥手。关于这个的介绍大多数都是文字和图示来分析的&#xff0c;但是具体到协议的内容时&#xff0c;有可能还是不清楚&#xff0c;下面我就通过具体协议来分析一下这个过程。 这里使用Wireshark网络分析工具…

【Linux】进程与文件系统(上)

由于这部分的知识很多很多&#xff0c;分成两回 目录 1.文件描述符 文件描述符 1.文件描述符 首先我们看一下几个小问题 1.你真的理解文件原理和操作了吗&#xff1f; 这不是语言的问题&#xff0c;而是操作系统的问题 2.是不是只有C/C有文件操作&#xff1f; 其他语…

【数据结构】结构最复杂实现最简单的双向带头循环链表

【数据结构】结构最复杂实现最简单的双向带头循环链表 一、前言二、目标三、实现1、初始化工作2、尾插2.1、图解思路2.2、代码实现 3、尾删3.1、图解思路3.2、代码实现 4、打印链表5、头插5.1、图解思路5.2、代码实现 6、头删6.1、图解思路6.2、代码实现 7、查找8、随机插入8.1…