封装_私有类字段和方法

前言

在 JavaScript 中,封装、私有类字段和方法是面向对象编程的一种重要特性。它们允许你将数据(属性)和对数据的操作(方法)组合在一起,并控制访问权限,从而提高代码的安全性和可维护性。私有字段和私有方法是指仅能在类的内部访问的属性和函数。外部代码无法直接访问或修改这些私有成员,这样就可以防止外部依赖于内部实现细节,提高了模块化和安全性。
本篇文章我们就来学习一下JavaScript中的公有字段,私有字段,公有方法,私有方法,还是以上一节的代码举例

javascript 复制代码
class Account {
  constructor(owner, currency, pin) {
    this.owner = owner;
    this.currency = currency;
    this._pin = pin;
    this._movements = [];
    this.locale = navigator.language;

    console.log(`欢迎来到你的账户,${owner}`);
  }

  //公共接口
  getMovements() {
    return this._movements;
  }

  deposit(val) {
    this._movements.push(val);
  }

  withraw(val) {
    this.deposit(-val);
  }

  _approveLoan(val) {
    return true;
  }

  requestLoan(val) {
    if (this._approveLoan(val)) {
      this.deposit(val);
      console.log('恭喜你!贷款成功');
    }
  }
}

公共字段

● 例如我们将浏览器设置语言和存取款的操作记录设置我公有字段,所有人都可以访问

javascript 复制代码
class Account {
  //公有字段(例子,实际与之前写法作用一样)
  locale = navigator.language;
  _movements = [];

  constructor(owner, currency, pin) {
    this.owner = owner;
    this.currency = currency;
    this._pin = pin;

    console.log(`欢迎来到你的账户,${owner}`);
  }

  //公共接口
  getMovements() {
    return this._movements;
  }

  deposit(val) {
    this._movements.push(val);
  }

  withraw(val) {
    this.deposit(-val);
  }

  _approveLoan(val) {
    return true;
  }

  requestLoan(val) {
    if (this._approveLoan(val)) {
      this.deposit(val);
      console.log('恭喜你!贷款成功');
    }
  }
}

私有字段

● 例如存款取款记录是私有字段,我们不希望可以被直接访问,从 ECMAScript 2022 开始,JavaScript 引入了私有字段的语法,例如 #privateField。

javascript 复制代码
class Account {
  //公有字段(例子,实际与之前写法作用一样)
  locale = navigator.language;

  //私有字段
  #movements = [];
  #pin;

  constructor(owner, currency, pin) {
    //参数中不可以直接为私有字段
    this.owner = owner;
    this.currency = currency;
    this.#pin = pin;

    console.log(`欢迎来到你的账户,${owner}`);
  }

  //公共接口
  getMovements() {
    return this.#movements;
  }

  deposit(val) {
    this.#movements.push(val);
  }

  withraw(val) {
    this.deposit(-val);
  }

  _approveLoan(val) {
    return true;
  }

  requestLoan(val) {
    if (this._approveLoan(val)) {
      this.deposit(val);
      console.log('恭喜你!贷款成功');
    }
  }
}

● 这样我们无法直接查看这个字段,当然使用getMovements同样可以访问,因为她还是一个公有的API

javascript 复制代码
console.log(ITshare.#movements);

公共方法

这个就不在赘述在了,在上述的构造器中,所有的方法都是公共方法

私有方法

私有方法和私有字段的表现方式一样

javascript 复制代码
class Account {
  //公有字段(例子,实际与之前写法作用一样)
  locale = navigator.language;

  //私有字段
  #movements = [];
  #pin;

  constructor(owner, currency, pin) {
    //参数中不可以直接为私有字段
    this.owner = owner;
    this.currency = currency;
    this.#pin = pin;

    console.log(`欢迎来到你的账户,${owner}`);
  }

  //公共接口
  getMovements() {
    return this.#movements;
  }

  deposit(val) {
    this.#movements.push(val);
  }

  withraw(val) {
    this.deposit(-val);
  }

  requestLoan(val) {
    if (this.#approveLoan(val)) {
      this.deposit(val);
      console.log('恭喜你!贷款成功');
    }
  }

  //私有方法
  #approveLoan(val) {
    return true;
  }
}
相关推荐
zhanghaha131413 分钟前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript
李少兄6 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
shmily麻瓜小菜鸡9 小时前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript
默_笙12 小时前
🍕 AI 的嘴巴装了水管(上):从"等它说完"到"边说边听"的流式输出指南
前端·javascript
暖焰核心12 小时前
继承全解——继承、默认成员函数、切片、隐藏与虚继承
java·前端·javascript
艾伦野鸽ggg12 小时前
前端异步请求的状态竞争(请求竞态)问题
前端·javascript·axios
是立不是利13 小时前
前端交互基石:深入剖析JavaScript三级联动背后的设计哲学
开发语言·前端·javascript
老刘的望远镜13 小时前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
java·开发语言·javascript
前端精髓13 小时前
React 更新 state 中的对象
javascript·react.js·ecmascript
可乐鸡翅yeah_14 小时前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放