【前端vue3】TypeScrip-Class类用法

类型声明

TypeScrip定义Class类
语法:

// 定义一个名为 Person 的类
class Person {
    constructor () {
        // 构造函数:稍后定义
    }

    run () {
        // 方法:稍后定义
    }
}

在TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明
例如:

class Person{
    constructor(name:string,age:number){
        this.name = name;
    }
    run(){

    }
}

以上代码提示出现错误:类型“Person”上不存在属性“name”。

在这里插入图片描述

在constructor上面声明后错误就消失了

class Person{
    name: string
    age: number
    constructor(name:string,age?:number){
        this.name = name;
    }
    run(){

    }
}

在这里插入图片描述

这样引发了第二个问题你如果了定义了变量不用 也会报错 通常是给个默认值 或者 进行赋值
例如:

class Person{
    name: string
    age: number
    constructor(name:string,age:number){
        this.name = name
    }
    run(){

    }
}

在这里插入图片描述

给age给默认值或者赋值

class Person{
    name: string
    age: number = 0 //给默认值
    constructor(name:string,age:number){
        this.name = name
    }
    run(){

    }
}
class Person{
    name: string
    age: number
    constructor(name:string,age:number){
        this.name = name,
        this.age = age  //赋值
    }
    run(){

    }
}

类的修饰符

总共有三个:public private protected

public

public修饰符的使用:

使用public 修饰符 可以让你定义的变量 内部访问 也可以外部访问 如果不写默认就是public

class Person{
    public name: string
    age: number
    constructor(name:string,age:number){
        this.name = name,
        this.age = age
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123);
xiaoc.name //name参数是可以直接调用的

private

使用 private 修饰符 代表定义的变量私有的只能在内部访问 不能在外部访问

class Person{
    public name: string
    private age: number
    constructor(name:string,age:number){
        this.name = name,
        this.age = age
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123);
xiaoc.name
xiaoc.age // 属性“age”为私有属性,只能在类“Person”中访问。ts(2341)

在这里插入图片描述

protected

使用 protected 修饰符 代表定义的变量私有的只能在内部和继承的子类中访问 不能在外部访问

class Person{
    public name: string
    private age: number
    protected sex: string
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name
xiaoc.age
xiaoc.sex //属性“sex”受保护,只能在类“Person”及其子类中访问。ts(2445)

在这里插入图片描述

静态属性和静态方法

用static 定义的属性 不可以通过this 去访问 只能通过类名去调用

class Person{
    public name: string
    private age: number
    protected sex: string
    static height: number
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
        this.height  //属性“height”在类型“Person”上不存在。你的意思是改为访问静态成员“Person.height”吗?ts(2576)

    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name

通过类名去调用

class Person{
    public name: string
    private age: number
    protected sex: string
    static height: number =180
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
        // this.height
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name
console.log(Person.height);

在这里插入图片描述
atic 静态函数 同样也是不能通过this 去调用 也是通过类名去调用

class Person{
    public name: string
    private age: number
    protected sex: string
    static height: number =180
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
        // this.height
    }
    static run(){
        return console.log(this.name);
        
    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name
console.log(Person.height);

Person.run()

需注意: 如果两个函数都是static 静态的是可以通过this互相调用

interface定义类

// 定义一个接口 PersonA,包含一个方法 get,接受一个参数 name,返回一个字符串
interface PersonA {
    get(name: string): string;
}

// 定义一个接口 PersonB,包含一个方法 set,无参数,无返回值,以及一个属性 sex,类型为字符串
interface PersonB {
    set(): void;
    sex: string;
}

// 定义一个类 PersonAClass
class PersonAClass {
    name: string; // 属性 name,类型为字符串

    constructor() {
        this.name = "小C学安全"; // 构造函数中初始化 name 属性为 "小C学安全"
    }
}

// 定义一个类 PersonbClass,继承自 PersonAClass,并实现了 PersonA 和 PersonB 接口
class PersonbClass extends PersonAClass implements PersonA, PersonB {
    sex: string; // 属性 sex,类型为字符串

    constructor() {
        super(); // 调用父类 PersonAClass 的构造函数
        this.sex = "男"; // 构造函数中初始化 sex 属性为 "男"
    }

    // 实现接口 PersonA 中的方法 get
    get(name: string): string {
        return "小白"; // 返回固定字符串 "小白"
    }

    // 实现接口 PersonB 中的方法 set
    set() {
        // 空方法体,不执行任何操作
    }
}

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

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

相关文章

AI 大模型企业应用实战(06)-初识LangChain

LLM大模型与AI应用的粘合剂。 1 langchain是什么以及发展过程 LangChain是一个开源框架,旨在简化使用大型语言模型构建端到端应用程序的过程,也是ReAct(reasonact)论文的落地实现。 2022年10月25日开源 54K star 种子轮一周1000万美金,A轮2…

【学习笔记】Mybatis-Plus(三):MP中Wrapper的使用

Wrapper简介 注意: 查询用QueryWrapper和LambdaQueryWrapper来封装 updateWrapper和LambdaUPdateWrapper不但能封装查询还能更改要更新的对象。 QueryWrapper的使用 QueryWrapper中的很多条件限定都是见名知其意的。下表列出来几个常用的: 1.多条件进行…

拖拽劫持与数据窃取

2010 年,ClickJacking 技术有了新的发展。一位名叫 Paul Stone 的安全研究者在 BlackHat 2010 大会上发表了题为“Next Generation Clickjacking”的演讲。在该演讲中,提出了“浏览器 拖拽事件”导致的一些安全问题。 目前很多浏览器都开始支持 Drag &a…

智能风控(原理、算法与工程实践)项目一

本文介绍该书第一章的项目:运用CART树进行规则挖掘,具体代码如下 #!/usr/bin/env python # coding: utf-8 # In[1]: import pandas as pd import numpy as np import os # In[2]: data pd.read_excel( ./data_for_tree.xlsx) # In[3]: data.h…

(南京观海微电子)——TFT LCD压合技术

TFT-LCD TFT-LCD open cell后段制程主要指的是将驱动IC和PCB压合至液晶板上,这个制程主要由三个步骤组成: 1.ACF (Anisotropic Conductive Film)的涂布。 在液晶板需要压合驱动IC的地方涂布ACF,ACF又称异方性导电胶膜,特点是上下…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 07:编码中的假象

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字,英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

Spring Boot + WebSocket 实现 IM 即时通讯

文章目录 1. 项目环境准备2. 配置WebSocket3. 创建消息处理器4. 创建消息类5. 创建前端页面6. 启动应用并测试7. 分析与扩展结论 🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈…

项目训练营第四天

项目训练营第四天 前端部分修改 前端用的是WebStorm和Ant Design Pro框架 Ant Design Pro是比较流行的一个前端登陆、注册、管理框架,能帮我们快速实现前端界面的开发 效果大致如图 使用起来也极为方便,首先在WebStorm 控制台中输入如下命令 # 使用…

Repair LED lights

Repair LED lights 修理LED灯,现在基本用灯带,就是小型LED灯串联一起的 1)拆旧灯条,这个旧的是用螺丝拧的产品 电闸关掉。 2)五金店买一个,这种是磁铁吸附的产品 现在好多都是铝线啊。。。 小部件&#x…

塞贝壳效应

塞贝克效应(Seebeck effect),通常被称为第一热电效应,是由托马斯约翰塞贝克(Thomas Johann Seebeck)在1821年发现的一种热电现象。这个效应描述了当两种不同的导体或半导体在它们的接点处有温度差时&#x…

6月21日训练 (东北林业大学)(个人题解)

前言: 这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。…

【区块链】区块链架构设计:从原理到实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 区块链架构设计:从原理到实践引言一、区块链基础概念1.1 区块链定义…

4.1 四个子空间的正交性

一、四个子空间的正交性 如果两个向量的点积为零,则两个向量正交: v ⋅ w v T w 0 \boldsymbol v\cdot\boldsymbol w\boldsymbol v^T\boldsymbol w0 v⋅wvTw0。本章着眼于正交子空间、正交基和正交矩阵。两个子空间的中的向量,一组基中的向…

网络知识 思维导图

计算机网络基础知识点多且杂,想要系统地学习,思维导图肯定是必不可少的。今天整理了38张思维导图,帮助你轻松理清思路,快速掌握关键内容。建议你收藏起来慢慢看,在看过之后最好能重新动手画一画,让计算机网…

TCP与UDP_三次握手_四次挥手

TCP vs UDP TCP数据 具体可以通过Cisco Packet Tracer工具查看: UDP数据 三次握手、四次挥手 为什么是3/4次?这牵扯到单工、双工通信的问题 TCP建立连接:表白 TCP释放连接:分手 TCP—建立连接—三次握手 解释: 首先&…

RTSP协议分析与安全实践

RTSP协议,全称实时流协议(Real Time Streaming Protocol),前文已经简单介绍了RTSP相关协议; RTSP和RTP(RTCP) 这里再提一下RTSP和RTP/RTCP、RSVP的关系;如图: RTSP和HTTP 相似性:RTSP和HTTP协议都使用纯…

Linux简单使用——配置仓库

虚拟机和Xshell连接 在虚拟机上打开终端查看IP 在Xshell上建立会话 输入ssh root192.168.231.123 防火墙关闭 、 重启计算机命令 删除文件 然后ls查看 清除之前的垃圾 最后做一下命令缓存

借助AI快速提高英语听力:如何获得适合自己的听力材料?

英语听力是英语学习中的一个重要组成部分,它对于提高语言理解和交流能力至关重要。可理解性学习(comprehensible input)是语言习得理论中的一个概念,由语言学家Stephen Krashen提出,指的是学习者在理解语言输入的同时&…

全栈人工智能工程师:现代博学者

任何在团队环境中工作过的人都知道,每个成功的团队都有一个得力助手——无论你的问题性质如何,他都能帮助你。在传统的软件开发团队中,这个人是一个专业的程序员,也是另一种技术的专家,可以是像Snowflake这样的数据库技…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…