封装_私有类字段和方法

news2024/11/16 3:44:48

前言

在 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('恭喜你!贷款成功');
    }
  }
}

公共字段

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

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。

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

console.log(ITshare.#movements);

在这里插入图片描述

公共方法

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

私有方法

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

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;
  }
}

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

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

相关文章

异步编程详解

1.什么是async std::async:是一个函数模板,用于启动一个异步任务。它接受一个可调用的对象(如函数、Lambda表达式、函数对象)作为参数,并在一个单独的线程上异步执行对象。std::async自动管理异步任务的生命周期,并返回一个std::future对象,该对象用于获取异步操作的结果。 2.什…

【Java】—— Java面向对象进阶:继承小练习-Java中实现圆柱体类及其体积计算

目录 1. 定义圆类(Circle) 2. 定义圆柱体类(Cylinder) 3. 测试圆柱体类 4. 总结 在Java中,我们可以通过面向对象的方式来模拟现实世界中的物体,比如圆柱体。本篇文章将通过一个简单的示例来展示如何定义…

全国大学生数学建模竞赛系统使用手册

注意!国赛是学校统一报名,所以如果在操作上有任何不清楚的地方,一定要在赛前即使询问自己学校组织数模的老师!并详细阅读本文和官网通知,以及:数模国赛提交MD5码和论文的坑! 数模比赛的建模手、…

【Python报错已解决】“ModuleNotFoundError: No module named ‘timm‘”

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言:一、问题描述1.1 报错示例:当我们尝试导入timm库时,可能会看到以下错误信息。…

颠覆传统:基于全文索引驱动下的高效一对多表结构设计!

首发公众号:赵侠客 引言 在数据库表结构设计中,一对多(1:N)关系的处理是非常常见需求,如一个用户有多个分类或角色。传统关系型数据库表设计方式通常要包括三张表:用户表、分类表、以及用户与分类之间的关…

LC开源电路的学习(一)

TI的升压芯片,电压虽然能升高,但是带来的问题就是最大电流大幅降低: CC1和CC2芯片接快充芯片之后,直接接到单片机的下载口: 这个有点意思,用导线换电阻: 、 PD快充芯片CH224K需要连接typeC的D…

华为云征文|基于Flexus云服务器X实例的应用场景-部署脚手架开源项目若依

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 先看这里 写在前面**Flexus X实例**的云服务器简介环境准备若依项目拉取导入数据库启动本地项目(后端)启动本地项目(前端)打包后…

图片转为PDF怎么弄?看这里,三款软件助你一键转换!

嘿,朋友们!现在信息这么多,图片在我们学习、工作、生活中帮了大忙。但有时候,我们想把图片整理好、分享给别人或者打印出来,PDF格式就特别合适。PDF文件不管在哪儿打开,内容都不会变样,还能加密…

Pandas 9-绘制柱状图

1. 准备数据 首先,需要准备一个DataFrame。 import pandas as pd # 创建一个DataFrame data { Name: [Alice, Bob, Charlie, David], Age: [24, 27, 22, 32], City: [New York, Los Angeles, Chicago, Houston], Score: [85, 92, 78, 88]} df pd.…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节:自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”,它能够把输入的数据(比如图片)压缩成一个更小的表示(编码&#…

超声波模块

HCSR04超声波模块是一种常用的测距模块,它通过检测超声波发射后遇到障碍物所反射的回波,从而测量出与障碍物之间的距离。以下是对HCSR04超声波模块的详细讲解: 一、模块组成与工作原理 组成:HCSR04超声波模块主要由两个压电陶瓷超…

【我的Android进阶之旅】快来给你的Kotlin代码添加Markdown格式的注释吧!

文章目录 一、 传统 HTML 格式注释二、 Markdown 格式注释三.、Markdown格式注释详解3.1. 基础语法3.1.1 单行注释3.1.1 多行注释3.2 标题3.3 列表3.4 加粗和斜体3.5 代码块3.6 链接3.7 引用3.8 表格3.9. 图片3.10. 示例代码3.11. 注释模板的使用场景3.12 实例示例四、总结在 A…

2024年9月深圳200万~300万的三房笔记

​整理了2024年9月深圳200万~300万的三房笔记,数据可能有​出入。有些商品房数据是我看到工抵房的数据,群里说工抵房的房价数据需要乘以1.2就比较接近当前现场的价格​。对于我个人来说关注地铁,即是否方便打工还有价格​。看着一些商品房的工…

【华三】不懂链路聚合?看这篇就够了!华三配置详解

【华三】不懂链路聚合?看这篇就够了!华三配置详解 背景链路聚合基本概念聚合组和聚合接口的类型二层聚合组/二层聚合接口三层聚合组/三层聚合接口聚合接口特性 聚合接口参考端口成员端口 操作Key成员端口的配置分类协议类配置-第一类配置属性配置-第二类…

Day 1 : 数据结构

引入 以张三为例:CEF不能同时举办。 数据的逻辑结构 数据结构是什么 研究计算机数据之间的关系 逻辑结构和存储结构及其操作 基本概念 数据 数据元素 逻辑结构 按前趋和后继数将逻辑结构分为:线性结构和非线性结构。 即:找前…

云首席产品规划专家的必修课

大家好,我是卢旗。 今天和大家探讨一下云计算规划专家的必备研究内容。 一、市场与客户需求分析: 1,市场调研:深入了解当前及未来云计算市场的趋势、竞争格局、客户需求变化等,识别出潜在的市场机会和威胁。 结合20…

C++ string类—容量、元素获取

一、Capacity size:string类对象中字符的个数为size;length:size作用一样,返回string对象中有效数据个数;capacity:一个string对象的容量capacity决定了这个对象能存储多少字符(不包括\0)&…

活动系统开发之采用设计模式与非设计模式的区别-需求整理

用户需求(活动系统): 1、活动类型:答题、图片展示、签到、抽奖、组团等活动 2、活动介绍: a、答题活动: 第一种是签到后,随机抽取10道题,答对8到就可以抽奖; 第二种是随机抽取一道题&#xff0…

Python优化算法24——基于觅食生境选择的粒子群算法(FHSPSO)

科研里面优化算法都用的多,尤其是各种动物园里面的智能仿生优化算法,但是目前都是MATLAB的代码多,python几乎没有什么包,这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考:Python优化算…

c/c++基础及类和对象汇总

目录 c基础 extern关键字及c中(隐式类型转换时)的引用 c中的引用(&)及&做返回值问题 c语言中的宏函数及c的内联函数及auto及NULL 计算类的大小及深入理解this指针(深入浅出) c中的const权限及s…