类继承中的 ECMAScript 2018(ES9) private 关键字

ECMAScript 2018(也称为 ES9)是 JavaScript 的最新版本,它引入了许多新功能和改进,其中包括对类继承的支持。在 ES9 中,新增了 private 关键字,用于定义类的私有成员。本文将详细介绍私有成员以及如何在类继承中使用它们。

什么是私有成员?

在一个类中,通常会有一些成员只能在类内部使用,而不能被外部访问,这样的成员就被称为私有成员。

在 JavaScript 中,通常使用下划线(_)来表示私有成员,虽然这并不是一种官方的约定。例如,以下代码定义了一个名为 Person 的类,其中包含一个私有成员 _name:

----- ------ -
  ----------------- -
    ---------- - ----- -- ------ -----
  -
  
  --------- -
    ------ ----------- -- ------------ -----
  -
-

在这个例子中,_name 是 Person 类的私有成员,它只能被 getName() 方法访问,而不能被外部代码访问。

ES9 中的 private 关键字

ES9 中新增了一种定义私有成员的方式,即使用 private 关键字。使用 private 关键字定义的成员只能在类的内部访问,外部无法访问。以下是使用 private 关键字定义私有成员的代码示例:

----- ------ -
  ----------------- -
    ---------- - ----- -- ------ -----
  -
  
  --------- -
    ------ ----------- -- ------------ -----
  -
  
  -------- - -- ------ ------
    ------------------- -----------------
  -
  
  ---------- -
    -------------- -- ------------ ------
  -
-

在这个例子中,#name 是 Person 类的私有成员,只能在类的内部访问。#greet() 是私有方法,也只能在类的内部访问。sayHello() 方法调用了私有方法 #greet()。

需要注意的是,private 关键字只能用于 class 内部,不能用于 class 外部。也就是说,无法通过实例对象访问私有成员,也无法通过继承访问父类的私有成员。

在类继承中使用私有成员

在类继承中,私有成员通常需要被继承,否则子类无法访问父类的私有成员。ES9 中提供了一种解决方案,即使用 super 关键字访问父类的私有成员。以下是继承 Person 类并访问父类私有成员的代码示例:

----- -------- ------- ------ -
  ----------------- ------ -
    ------------ -- ---------
    ----------- - ------ -- ------ ------
  -
  
  ---------- -
    ------ ------------ -- ------------ ------
  -
  
  ----------- -
    --------------- ---- -- -------------- --- --- - ------------------ -- --------- -----
    -------------- -- --------- ------
  -
-

在这个例子中,Employee 类继承了 Person 类,并定义了一个私有成员 #title。introduce() 方法通过 super 关键字访问了父类的私有成员 #name 和私有方法 #greet()。

需要注意的是,子类无法直接访问父类私有成员,而是需要通过父类提供的公共方法或 super 关键字来访问。因此,在类设计时需要考虑如何提供公共接口,以便子类能够访问父类的私有成员。

总结

在 ES9 中,private 关键字为类继承中的私有成员提供了一种新的定义方式,它比传统的下划线约定更加规范和语义化。使用 private 关键字可以将私有成员定义在类的内部,并通过继承和 super 关键字访问父类的私有成员。需要注意的是,私有成员只能在类的内部访问,外部无法访问。

有了私有成员,类的设计变得更加灵活和可维护。合理地使用私有成员可以保护类的内部状态,避免外部代码的干扰。同时,它也提高了代码的可复用性和可扩展性,使得类的继承更加方便和自然。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/659f8ebcadd4f0e0ff82183c


猜你喜欢

  • RxJS 实战:实现无限滚动加载

    介绍 RxJS 是 JavaScript 中非常流行的响应式编程库。它可以让开发者更方便地处理异步和事件驱动的数据流。在本文中,我们会介绍如何使用 RxJS 实现前端开发中常见的无限滚动加载。

    9 个月前
  • GraphQL API 错误:如何准确地显示错误信息

    GraphQL 是一个以查询语言为基础的 API,它可以更精确地获取需要的数据。在实际使用过程中,开发人员可能会遇到一些错误信息。这些错误信息可能非常令人困惑,特别是在处理复杂的应用程序时。

    9 个月前
  • Material Design 中的 Toolbar 与 Navigation Drawer 协同使用指南

    随着移动端设备的普及,Web 前端开发逐渐成为了一种重要的技能。而在大量的前端框架和库中,Material Design 成为了很多人的选择。Material Design 是由 Google 推出的...

    9 个月前
  • ES8 中的 Rest/Spread Properties 解决 JavaScript 对象复制问题

    在 JavaScript 开发中,常常需要复制对象或者数组,以便于对它们进行操作,此时原来的对象或者数组就不会受到影响。在 ES8 中引入了 Rest/Spread Properties,它可以大大简...

    9 个月前
  • Mocha 和 Sinon 共同使用的最佳实践:如何模拟异步调用?

    一般来说,前端开发涉及到了很多异步调用,比如 AJAX 请求、事件监听和定时器等等。如何在 Mocha 测试套件中模拟这些异步调用是一个非常重要的问题。本文将介绍使用 Sinon 和 Mocha 共同...

    9 个月前
  • RESTful API 中的 HATEOAS 原则详解

    RESTful API 是现代 Web API 的一种设计风格,其以资源为核心,使用统一的接口进行交互,被广泛应用于移动应用、Web 应用、IoT 设备等场景。而 HATEOAS 原则则是 RESTf...

    9 个月前
  • ES10 新特性 BigInt 支持 JavaScript 中的大整数计算

    在过去,JavaScript 中只能计算 53 位以内的整数。一旦超出了这个范围,就会出现计算错误。为了解决这个问题,ECMAScript 2020(ES10)引入了 BigInt,用于支持 Java...

    9 个月前
  • ESLint 插件 vscode-ESLint 取代标准的 VSCode js 格式化工具 —— js-beautify

    ESLint 插件 vscode-ESLint 取代标准的 VSCode js 格式化工具 —— js-beautify 前言 在前端开发中,代码风格一直是一个非常重要的问题,良好的代码风格可以提高团...

    9 个月前
  • ES7 之 async/await 解决异步回调地狱

    前言 在传统的 JavaScript 编程中,我们使用回调函数来处理异步操作。而随着 JavaScript 的不断发展和普及,出现了 Promise 和 Generator 等概念来更好的处理异步操作...

    9 个月前
  • PM2 的 PID 如何管理?

    什么是 PM2? PM2 是一款 Node.js 进程管理器,它可以管理应用程序的进程,确保它们始终运行,并为应用程序提供额外的功能,例如负载均衡、日志记录和重新启动策略。

    9 个月前
  • MongoDB 数据恢复技巧:数据恢复、数据备份

    在开发过程中,数据的重要性不言而喻,因此数据的备份和恢复是一个很重要的工作。MongoDB 作为一种 NoSQL 数据库,在数据的备份和恢复方面有其独特的方法。本文将介绍 MongoDB 数据恢复技巧...

    9 个月前
  • 高性能 Node.js 及相关性能优化解决方案分享

    在现代 Web 开发中,Node.js 已经成为了最受欢迎的服务器端技术之一。然而,开发者们还是会经历一些 Node.js 应用性能问题。 本篇文章将介绍 Node.js 服务器端的性能瓶颈,提出一些...

    9 个月前
  • webpack4 优化打包速度的常用方法?

    Webpack 是一个现代化的 JavaScript 应用程序静态模块打包器。使用 Webpack 可以将整个项目拆分成多个模块进行交叉依赖,最终打包成一个或多个文件。

    9 个月前
  • 新增的 ES11 WeakRef 类的使用方法和注意事项

    在 ES11 中,引入了一个新的类:WeakRef。该类允许开发者创建一个弱引用(weak reference),即一个不会阻止垃圾回收器清除对象的引用。本文将详细介绍 WeakRef 类的使用方法和...

    9 个月前
  • babel-plugin-transform-runtime 的应用

    在前端代码的编写过程中,我们经常会使用新的 ECMAScript 特性来提高代码的可读性和效率。但是,当我们使用一些新特性时,可能会出现兼容性问题,这就需要使用一些工具来解决。

    9 个月前
  • 在 Koa2 中使用 GraphQL 和 Relay

    GraphQL 是一种数据查询语言,用于构建 API 和客户端应用程序。它可以帮助你有效地查询数据,并在客户端中设置数据模型。Relay 是一个基于 React 的框架,用于构建可伸缩且高度优化的客户...

    9 个月前
  • CSS Flexbox 布局实战:借助 flexbox 解决表格横向溢出的问题

    随着网页设计的日益复杂,不少前端开发者遇到了表格溢出的问题。特别是对于那些需要横向滚动的表格而言,溢出的问题更加严重。但是,通过使用 CSS Flexbox 布局,开发者可以轻松解决这个问题。

    9 个月前
  • 使用 Headless CMS 创建基于 Docker 的应用程序,方便快捷部署

    在现代 WEB 开发中,一些新的技术在迅速推广,其中 Headless CMS 技术成为了最受欢迎的一种。在这篇文章里,我们将讨论如何使用 Headless CMS 创建基于 Docker 的应用程序...

    9 个月前
  • ES6 中 Array.from 利器在实际开发中的使用

    ES6 中 Array.from 利器在实际开发中的使用 在 JavaScript 中,数组是我们最常见和重要的数据类型之一,而在 ES6 中,我们有一个非常强大的工具——Array.from 方法。

    9 个月前
  • 如何实现 Material Design 中的 Stepper 控件

    Stepper 控件是一种常见的 Material Design 设计风格中的交互控件。通常用于引导用户在多个步骤中完成复杂操作,如登陆、注册、填写表单等。在本文中,我们将指导您如何使用 HTML、C...

    9 个月前

相关推荐

    暂无文章