TS类中属性的封装

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

TypeScript 复制代码
// 创建一个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修饰符设置的属性只能在当前类和继承当前类的子类中使用。

TypeScript 复制代码
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方法用来设置属性:

TypeScript 复制代码
// 创建一个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方法的设置:

TypeScript 复制代码
// 创建一个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"
相关推荐
Csvn4 小时前
OpenSpec 详细使用教程
前端
方也_arkling4 小时前
【Java-Day08】static / final / 枚举
java·开发语言
风吹夏回4 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei114 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1124 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding5 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
之歆5 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
秋95 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
xiaoshuaishuai85 小时前
C# 内存管理与资源泄漏
开发语言·c#
云水一下5 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5