TS类中属性的封装

news2024/12/23 12:21:28

我们在如下的代码中,我们在类中设置属性,创建的对象可以随意修改自身的属性,对象中的属性可以任意被修改导致对象中的数据非常不安全。

// 创建一个Person类
class Person {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

// 创建一个Person对象并进行修改
const per = new Person("寻霖", 18);
console.log(per);  // 打印:{name:"寻霖", age:18}
per.name = "XunLin";
per.age = 20;
console.log(per);  // 打印:{name:"XunLin", age:20}

一、 属性修饰符

(一)public修饰符

public修饰符设置的属性可以在任意地方修改和访问属性值,未给属性设置属性修饰符时默认值就是public。

public 属性名 : 数据类型;

(二)private修饰符

private修饰符设置的属性只能在类的内部修改和访问属性值。

private 属性名 : 数据类型;

我们在对象中去修改属性值的时候就会报错: 

(三)protected修饰符 

protected修饰符设置的属性只能在当前类和继承当前类的子类中使用。

class A {
  protected num: number;
  constructor(num: number) {
    this.num = num;
  }
}

class B extends A {
  test() {
    console.log(this.num);
  }
}

const a = new A(1);
const b = new B(2);
b.test();  // 打印:2

二、定义属性存取器访问和设置私有属性 

既然私有属性我们只能在类中进行访问,那我们就在类中定义访问和设置属性方法,对象通过调用方法去访问和设置属性。

getter方法用来获取属性,setter方法用来设置属性:

// 创建一个Person类
class Person {
  private name: string;
  constructor(name: string) {
    this.name = name;
  }
  // 获取name属性
  getName() {
    return this.name;
  }
  // 设置name属性
  setName(name:string) {
    this.name = name;
  }
}

const per = new Person("寻霖");
console.log(per.getName());  // 打印:"寻霖"
per.setName("XunLin");
console.log(per.getName());  // 打印:"XunLin"

但是TS中提供了更方便的getter和setter方法的设置:

// 创建一个Person类
class Person {
  private name: string;
  constructor(name: string) {
    this.name = name;
  }
  // getter方法获取name属性
  get propName() {
    return this.name;
  }
  // setter方法设置name属性
  set propName(value:string) {
    this.name = value;
  }
}

const per = new Person("寻霖");
console.log(per.propName);  // 打印:"寻霖"
per.propName = "XunLin";
console.log(per.propName);  // 打印:"XunLin"

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

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

相关文章

通道剪枝channel pruning

1、相关定义 过参数化:主要是指在训练阶段,在数学上需要进行大量的微分求解,去捕捉数据中微小的变化信息,一旦完成迭代式的训练之后,网络模型在推理的时候就不需要这么多参数。剪枝算法:核心思想就是减少网…

【【萌新的SOC学习之小水文系列】】

萌新的SOC学习之小水文系列 SD卡读写TXT文本实验 SD 卡共有 9 个引脚线,可工作在 SDIO 模式或者 SPI 模式。在 SDIO 模式下,共用到 CLK、CMD、DAT[3:0]六根信号线;在 SPI 模式下,共用到 CS(SDIO_DAT[3])、…

栅形状的影响及可靠性的优化

栅形状的影响 VD-MOSFET单元结构采用平面栅极拓扑结构,栅极电极位于半导体的平坦上表面。虽然在这种结构中,在平面结处会发生电场增强,但在栅极电极处不会发生电场增强,因为栅极电极的边缘与高度掺杂的N源区重叠。栅极电极的边缘被…

新能源+低代码:百数服务商新领域,跨行业结合所碰撞出的新火花

新能源行业的兴起主要是在最近几年,特别是“双碳”目标提出后,中国的新能源行业迎来了快速发展的阶段。在政策支持和资本加持下,各种新能源和绿色发展基金设立,以新能源为主体的新型电力系统也得到了深化改革,大力推动…

Qt中QTimer定时器的用法

Qt中提供了两种定时器的方式一种是使用Qt中的事件处理函数,另一种就是Qt中的定时器类QTimer。 使用QTimer类,需要创建一个QTimer类对象,然后调用其start()方法开启定时器,此后QTimer对象就会周期性的发出timeout()信号。 1.QTimer…

十五、异常(6)

本章概要 Try-With-Resources 用法 揭示细节 异常匹配 Try-With-Resources 用法 在考虑所有可能失败的方法时,找出放置所有 try-catch-finally 块的位置变得令人生畏。确保没有任何故障路径,使系统远离不稳定状态,这非常具有挑战性。 Inp…

Unity ToLua热更框架使用教程(1)

从本篇开始将为大家讲解ToLua在unity当中的使用教程。 Tolua的框架叫LuaFramework,首先附上下载链接: https://github.com/jarjin/LuaFramework_UGUI_V2 这个地址的是UGUI的。 下载完之后导入项目,首先,我们要先让这个项目跑起…

老卫带你学---Datagrip连接clickhouse

Datagrip连接clickhouse Datagrip是一个DB可视化特别方便的软件,因为一些业务需要采用clickhouse,然而在download相关driver的时候出现各种问题,于是整理一下方案 1.需要下载clickhouse-jdbc的jar包,可以直接在sonatype上去下载…

C# 人像卡通化

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;nam…

图像分割-Segment Anything实践

一、模型介绍 Segment Anything 模型是一种新的图像分割模型,它可以在不需要大量标注数据的情况下,对图像中的任何物体进行分割。这种方法可以帮助计算机视觉领域的研究人员和开发人员更轻松地训练模型,从而提高计算机视觉应用程序的性能。该…

超前预告 | 云原生?大模型?这届乌镇双态IT大会亮点有点多

石道旁的水面,轻轻泛着微光,几片墨绿缓缓飘下,荡起柔和的波纹,向对岸游去。这儿不似北方秋阳如火的躁动,这儿的秋色是安静的,里便是江南水乡乌镇…… 2023年,第六届双态IT乌镇用户大会将于10月…

不再为文件名大小写烦恼:批量转换,一招搞定

在电脑使用过程中,我们经常需要处理各种文件,有时需要对文件名进行大小写转换以符合特定要求或便于管理。手动修改不仅费时还容易出错,那么有没有一种方法可以批量转换文件名大小写呢?答案是肯定的,下面就为大家介绍如…

DC电源模块在电容滤波器上的设计

BOSHIDA DC电源模块在电容滤波器上的设计 DC电源模块在电容滤波器上的设计是电源管理系统中非常重要的一部分,其目的是为了确保电源输出电压的稳定性和纹波尽可能小。在设计中,需要考虑到电源负载的变化和变压器等电源配件的电磁干扰等因素。下面我们详细…

基于Java的民宿管理系统设计与实现(源码+lw+部署文档+讲解等)(民宿预约、民宿预订、民宿管理、酒店预约通用)

文章目录 前言具体实现截图论文参考详细视频演示代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技…

【数据结构】二叉树--堆排序

目录 一 降序(建小堆) 二 升序 (建大堆) ​三 优化(以升序为例) 四 TOP-K问题 一 降序(建小堆) void Swap(int* x, int* y) {int tmp *x;*x *y;*y tmp; }//降序 建小堆 void AdjustUp(int* a, int child) {int parent (child - 1) / 2;while (child > 0){if (a[chil…

(三)Apache log4net™ 手册 -演示

0、引言 在开始本文之前,推荐您首先阅读 Apache log4net™ 手册中有关 介绍 与 配置 的相关内容。本文将通过实践分别为您演示如何使用 Visual Studio 2022 在 .NET Framework 项目和 .NET 项目下配置并使用 Log4Net。 1、为 .NET Framework 项目配置 Log4Net 1.1…

day26--AJAX(axios使用,http协议(部分),接口文档,form-serialize使用)

目录 AJAX介绍: 什么是AJAX 怎么用AJAX? axios的使用: axios的核心配置: url统一资源定位符: 组成: http协议: 域名: 资源路径: 查询参数: 常用的…

Text embedding 模型总结

文章目录 MTEB榜单8个嵌入任务三种数据集类别 C_METB榜单文本向量表示模型 目前,随着 Langchain LLM模型 的火热,除了层出不穷的大模型外,因为检索的能力会很大程度影响最终的问答效果,文本的嵌入模型也是大家比较关注的。本文主…

Redis之主从复制,哨兵模式,集群

Redis之主从复制,哨兵模式,集群 1、主从复制1.1主从复制概述1.2Redis主从复制作用1.3Redis主从复制流程1.4部署Redis 主从复制 2、哨兵模式2.1哨兵模式原理2.2哨兵模式的作用2.3哨兵模式的结构2.4故障转移机制2.5搭建Redis 哨兵模式 3、Redis集群模式3.1…

在开发APP过程中外包我们经常会遇到哪些问题?我们该如何避免?

虽然选择一个外包公司有很多坑,但是我们有的时候不得不选择一个外包公司,所以选择外包的时候我们要注意一些细节可以有效的区分开外包app产品的可靠性还是至关重要!希望我整理的这些对各位有需要的同学有所帮助! 首先我们先从公司…