首页 > 其他分享 >ts一个class有几种类型的属性

ts一个class有几种类型的属性

时间:2024-07-14 15:20:31浏览次数:11  
标签:console 定义 instance ts name 访问 class 属性

在 TypeScript 中,一个类(class)可以拥有以下几种类型的属性:

  1. 实例属性(Instance properties)

    • 这些属性是在类的构造函数中使用 this 关键字定义的。
    • 每个实例都有自己独立的实例属性。
  2. 原型属性(Prototype properties)

    • 这些属性是定义在类的原型对象上的,所有实例共享同一个原型对象。
    • 可以通过类的方法定义(不使用 static 关键字)。
  3. 静态属性(Static properties)

    • 这些属性是直接添加到类本身的,而不是类的实例。
    • 通过使用 static 关键字定义。
  4. 私有属性(Private properties)

    • 使用 private 关键字定义的属性,只能在类的内部访问。
  5. 受保护属性(Protected properties)

    • 使用 protected 关键字定义的属性,可以在类的内部和继承类中访问。
  6. 只读属性(Readonly properties)

    • 使用 readonly 关键字定义的属性,只能在初始化时设置值,之后不能更改。

示例

class Example {
  // 私有属性
  private privateProperty: string;
  
  // 受保护属性
  protected protectedProperty: string;
  
  // 只读属性
  readonly readonlyProperty: string;

  constructor(public name: string) {
    // 实例属性
    this.privateProperty = 'This is a private property';
    this.protectedProperty = 'This is a protected property';
    this.readonlyProperty = 'This is a readonly property';
  }

  // 原型方法
  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }

  // 静态方法
  static staticMethod() {
    console.log('This is a static method.');
  }

  // 访问私有属性的方法
  getPrivateProperty() {
    return this.privateProperty;
  }
}

// 创建实例
const instance = new Example('Alice');

// 访问实例属性
console.log(instance.name); // 输出: Alice

// 访问原型方法
instance.greet(); // 输出: Hello, my name is Alice

// 访问静态方法
Example.staticMethod(); // 输出: This is a static method.

// 访问私有属性
console.log(instance.getPrivateProperty()); // 输出: This is a private property

// 访问受保护属性(受保护属性不能在类外部访问,这里会报错)
// console.log(instance.protectedProperty); // 错误: Property 'protectedProperty' is protected and only accessible within class 'Example' and its subclasses.

// 访问只读属性
console.log(instance.readonlyProperty); // 输出: This is a readonly property

// 尝试修改只读属性(只读属性不能修改,这里会报错)
// instance.readonlyProperty = 'New value'; // 错误: Cannot assign to 'readonlyProperty' because it is a read-only property.

详细解释

  1. 实例属性

    • 定义:在类的构造函数中使用 this 关键字定义的属性。
    • 访问:通过类的实例访问。
    • 示例:
      constructor(public name: string) {
        this.name = name;
      }
      const instance = new Example('Alice');
      console.log(instance.name); // 输出: Alice
      
  2. 原型属性

    • 定义:通过类的方法定义(不使用 static 关键字),这些方法添加到类的原型对象上。
    • 访问:通过类的实例访问。
    • 示例:
      greet() {
        console.log(`Hello, my name is ${this.name}`);
      }
      const instance = new Example('Alice');
      instance.greet(); // 输出: Hello, my name is Alice
      
  3. 静态属性

    • 定义:使用 static 关键字定义,直接添加到类本身,而不是类的实例。
    • 访问:通过类本身访问,而不是通过实例访问。
    • 示例:
      static staticMethod() {
        console.log('This is a static method.');
      }
      Example.staticMethod(); // 输出: This is a static method.
      
  4. 私有属性

    • 定义:使用 private 关键字定义,只能在类的内部访问,外部无法直接访问。
    • 访问:通过类内部的方法访问。
    • 示例:
      private privateProperty: string;
      
      constructor() {
        this.privateProperty = 'This is a private property';
      }
      
      getPrivateProperty() {
        return this.privateProperty;
      }
      const instance = new Example('Alice');
      console.log(instance.getPrivateProperty()); // 输出: This is a private property
      
  5. 受保护属性

    • 定义:使用 protected 关键字定义,可以在类的内部和继承类中访问。
    • 示例:
      protected protectedProperty: string;
      
      constructor() {
        this.protectedProperty = 'This is a protected property';
      }
      
      // 受保护属性在子类中可以访问
      class SubExample extends Example {
        logProtectedProperty() {
          console.log(this.protectedProperty);
        }
      }
      
      const instance = new SubExample('Alice');
      instance.logProtectedProperty(); // 输出: This is a protected property
      
  6. 只读属性

    • 定义:使用 readonly 关键字定义,只能在初始化时设置值,之后不能更改。
    • 示例:
      readonly readonlyProperty: string;
      
      constructor() {
        this.readonlyProperty = 'This is a readonly property';
      }
      
      const instance = new Example('Alice');
      console.log(instance.readonlyProperty); // 输出: This is a readonly property
      

通过这种方式,我们可以看到在 TypeScript 类中定义和访问实例属性、原型属性、静态属性、私有属性、受保护属性和只读属性的方法。每种类型的属性有其特定的用途和访问方式。

标签:console,定义,instance,ts,name,访问,class,属性
From: https://www.cnblogs.com/jocongmin/p/18301601

相关文章

  • js class super的作用
    jssuper作用在JavaScript中,super关键字有两个主要用途:在子类的构造函数中调用父类的构造函数:使用super()来调用父类的构造函数,并继承父类的属性。在子类的方法中调用父类的方法:使用super.methodName()来调用父类的方法。示例解释使用类classParent{......
  • ts bigint和number的区别
    在TypeScript(以及JavaScript)中,bigint和number是两种不同的数值类型,它们有一些显著的区别和特性。区别和特性表示范围:number:表示标准的双精度64位浮点数,可以表示的范围是从-Number.MAX_SAFE_INTEGER到Number.MAX_SAFE_INTEGER(约为±9.2×10^15)。bigint:可以表示......
  • 基于Ubuntu 24.04 LTS安装elasticsearch-8.14.3+Kibanna
    1.安装Elasticsearch1.1下载Elasticsearch#1.更新包索引sudoaptupdate#2.升级已安装的软件包sudoaptupgrade-y#3.进入/opt目录cd/opt#4.下载Elasticsearch压缩包sudowgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8......
  • 提升漏洞挖掘效率:详解RustScan端口快速扫描工具
    在漏洞挖掘过程中,梳理目标站点的资产面是至关重要的一步。这一过程通常需要进行全量端口扫描,以发现目标站点上所有可能的开放端口。然而,传统的端口扫描工具往往需要大量时间来完成这一任务,特别是在面对大量端口时。这不仅延长了整个漏洞挖掘的时间,还可能导致关键漏洞的发现......
  • java InputStream read使用及读取数据注意
    publicabstractintread()throwsIOException;从输入流中读取下一个字节的数据。值字节以int的形式返回,范围在0-255之间。如果由于到达流的末尾而没有字节可用,则返回值-1。此方法会一直阻塞,直到输入数据可用、检测到流结束或抛出异常为止。 publicintread(byteb[],i......
  • 使用 pip 和 requirements.txt 安装 Python 包
    1.构建当前项目需要的软件包pip3installpipreqspip3installpip-toolspipreqs--savepath=requirements.in&&pip-compile1.根据配置文件批量安装软件包。requirements.txt在某些环境中,可使用pip3而不是pippipinstall-rrequirements.txt2.检查当前环境......
  • ts vue3 自定义指令
    当然,以下是将前面两个步骤汇总到一起的完整实现方案:1.定义指令首先,在src/directives文件夹中创建你的自定义指令文件。例如,v-focus.ts和v-color.ts:v-focus.ts:import{Directive}from'vue';constvFocus:Directive={mounted(el){el.focus();}};ex......
  • unplugin-vue-components 简介
    unplugin-vue-components简介unplugin-vue-components是一个用于自动导入Vue组件的插件,能够在Vue3项目中简化组件的使用,无需手动导入每个组件。它支持按需加载,提高开发效率。安装使用npm或yarn安装插件:npminstall-Dunplugin-vue-components或yarnadd-Dunp......
  • ts vue3 element-plus 自建可配置表单弹窗实现
    当然可以!下面是使用TypeScript语法的动态表单弹出组件示例。1.创建动态表单弹出组件(TypeScript)<template><el-dialog:visible.sync="visible"title="表单"@close="handleClose"><el-form:model="formData":rules="rules"......
  • FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
    ​《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.2 音视频文件的封装格式”介绍了视频流的PS格式和TS格式。由于TS包的长度固定,从TS流的任一片段开始都能独立解码,因此可以把TS当成音视频文件的封装格式。鉴于TS包的独立解码特性,HLS协议引入了TS格式作为传输单元。HLS协......