【前端vue3】TypeScrip-Class类用法

news2024/11/26 1:57:34

类型声明

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.coloradmin.cn/o/1852368.html

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

相关文章

【递归、搜索与回溯】floodfill算法一

floodfill算法一 1.floodfill算法简介2.图像渲染3.岛屿数量4.岛屿的最大面积 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.floodfill算法…

AI视频教程下载-与ChatGPT结合的UX用户体验/UI用户界面设计策略

Revolutionize UX_UI_ AI-Design Strategies with ChatGPT 提升你的设计工具包:使用ChatGPT、Figma和Miro的AI驱动UX/UI策略 50个创新UX提示 了解人工智能的基础知识。介绍ChatGPT及其底层技术。区分不同AI模型及其在设计中的应用。将AI工具融入设计工作流程的策略…

摄像头画面显示于unity场景

🐾 个人主页 🐾 🪧阿松爱睡觉,横竖醒不来 🏅你可以不屠龙,但不能不磨剑🗡 目录 一、前言二、UI画面三、显示于场景四、结语 一、前言 由于标题限制,这篇文章主要是讲在unity中调用摄…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-28批量规范化

28批量规范化 """可持续加速深层网络的收敛速度""" import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as pltdef batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):""&quo…

ultralytics官方更新 | 添加YOLOv10到ultralytics

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录:《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、…

【idea-jdk1.8】使用Spring Initializr 创建 Spring Boot项目没有JDK8

信息差真可怕! 很久没创建springboot项目,今天使用idea的Spring Initializr 创建 Spring Boot项目时,发现java版本里,无法选择jdk1.8,只有17、21、22;前段时间也听说过,springboot将放弃java8&a…

【深度学习驱动流体力学】计算流体力学openfoam-paraview与python3交互

目的1:配置 ParaView 中的 Python Shell 和 Python 交互环境 ParaView 提供了强大的 Python 接口,允许用户通过 Python 脚本来控制和操作其可视化功能。在 ParaView 中,可以通过 View > Python Shell 菜单打开 Python Shell 窗口,用于执行 Python 代码。要确保正确配置 …

GitLab配置免密登录之后仍然需要Git登录的解决办法

GitLab配置免密登录之后仍然需要Git登录的解决办法 因为实习工作需要,要在本地拉取gitlab上的代码,设置了密钥之后连接的时候还需要登录的token,摸索之后有了下面的解决办法。 方法一: 根据报错的提示,去网站上设置个人…

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

6月21日-23日,2024华为开发者大会(HDC 2024)如期举行。在22日的【鸿蒙生态伙伴SDK】分论坛中,正式发布了【鸿蒙生态伙伴SDK市场】,其中蚂蚁数科旗下移动开发平台mPaaS(以下简称:蚂蚁mPaaS&#…

How to use ModelSim

How to use ModelSim These are all written by a robot Remember, you can only simulate tb files.

SD卡无法读取?原因分析与数据恢复策略

一、SD卡无法读取的困境 SD卡作为便携式的存储介质,广泛应用于手机、相机、平板等多种电子设备中。然而,在使用过程中,我们可能会遭遇SD卡无法读取的困扰。当我们将SD卡插入设备时,设备无法识别SD卡,或者虽然识别了SD…

学习使用js和jquery修改css路径,实现html页面主题切换功能

学习使用js和jquery修改css路径&#xff0c;实现html页面主题切换功能 效果图html代码jquery切换css关键代码js切换css关键代码 效果图 html代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>修改css路径</title&g…

通俗解释resultType和resultMap的区别

【 1 对于单表而言&#xff1a; 注&#xff1a;以下都是摘抄过来的&#xff0c;做了让自己更能理解的版本 如果数据库返回结果的列名和要封装的实体的属性名完全一致的话用 resultType 属性 如果数据库返回结果的列名&#xff08;起了别名&#xff09;和要封装的实体的属性名…

PHP题目

一.编写函数change($str)实现字符串转换功能&#xff0c;例如“str_replace”转换成“str%replace”、“arr_var”转换成“arr%var”。 <?php function change($str){$astr_replace(_,%,$str);return $a; } echo change(str_replace); ?> 运行结果&#xff1a; 二.通…

spring-依赖注入DI

Setter注入&#xff1a; 1、引用类型&#xff1a;在bean中定义引用类型属性并提供可访问的set方法&#xff0c;配置中使用property标签ref属性注入引用类型对象&#xff1b; 2、简单类型&#xff1a;在bean中定义引用类型属性并提供可访问的set方法&#xff0c;在配置中使用pr…

NavicatforMySQL11.0软件下载-NavicatMySQL11最新版下载附件详细安装步骤

我们必须承认Navicat for MySQL 支援 Unicode&#xff0c;以及本地或远程 MySQL 服务器多连线&#xff0c;使用者可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理使用者权限&#xff08;安全设定&#xff09;、将数据库备份/复原、汇入/汇出数据&…

md5在ida中的识别

ida中 识别md5 ,先右键转为hex 或者按h _DWORD *__fastcall MD5Init(_DWORD *result) {*result 0;result[1] 0;result[2] 1732584193;result[3] -271733879;result[4] -1732584194;result[5] 271733878;return result; }在ida中当然也可以使用搜索 search imdate-value …

分布式系统的演化(单机架构/应用符合和存储服务分离架构/应用服务集群架构/主从分离架构/冷热分离架构)

文章目录 单机架构应用服务和存储服务分离应用服务集群架构读写分离/主从分离架构冷热分离架构--引入缓存分库分表 单机架构 单机架构只有一台服务器&#xff0c;使用一台服务器负责所有的工作 举个例子&#xff1a;假设有以下电商网站&#xff0c;商品、用户、交易等功能服务…

实验六:三维图形修改器的综合应用

如果文章有写的不准确或需要改进的地方&#xff0c;还请各位大佬不吝赐教&#x1f49e;&#x1f49e;&#x1f49e;。朱七在此先感谢大家了。&#x1f618;&#x1f618;&#x1f618; &#x1f3e0;个人主页&#xff1a;语雀个人知识库 &#x1f9d1;个人简介&#xff1a;大家…