当前位置: 首页 > news >正文

封装_私有类字段和方法

前言

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenCV绘图函数(6)绘制椭圆函数ellipse()的使用
  • 【C++设计模式】(三)创建型模式:单例模式
  • 构建智能化Web应用防火墙与自动化攻击测试系统
  • 医院建筑的电气设计——保障医疗质量与安全的坚固基石
  • 点餐API接口对接的过程中需要注意哪些问题
  • 数据结构与算法---排序算法
  • 使用统计方法在AMD GPU上使用JAX Profiler可靠地比较大型生成AI模型中的算法性能
  • 详解PyTorch中的`remove_self_loops`函数及其在图神经网络中的应用
  • 白手起家的七个逆向思维
  • 软件测试 | 测试用例
  • SpringCloud Alibaba】(十三)学习 RocketMQ 消息队列
  • 003.精读《MapReduce: Simplified Data Processing on Large Clusters》
  • Npm install 原理
  • Dockerfile应用、私有仓库
  • 昇腾AI处理器的计算核心 - AI Core即DaVinci Core
  • 78. Subsets
  • javascript数组去重/查找/插入/删除
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • react-native 安卓真机环境搭建
  • SQL 难点解决:记录的引用
  • 技术发展面试
  • 力扣(LeetCode)21
  • 前端代码风格自动化系列(二)之Commitlint
  • 区块链技术特点之去中心化特性
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 原生Ajax
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​io --- 处理流的核心工具​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #、%和$符号在OGNL表达式中经常出现
  • #vue3 实现前端下载excel文件模板功能
  • (+4)2.2UML建模图
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (zhuan) 一些RL的文献(及笔记)
  • (二)JAVA使用POI操作excel
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (数据结构)顺序表的定义
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 的缓存方案
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET开发者必备的11款免费工具
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • ::before和::after 常见的用法
  • @GlobalLock注解作用与原理解析
  • @RequestBody的使用
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具