写点什么

JavaScript 即将加入私有字段和私有方法

  • 2019-10-15
  • 本文字数:899 字

    阅读完需:约 3 分钟

JavaScript即将加入私有字段和私有方法

尽管 JavaScript 在 2015 年就有了类,但仍然没有私有字段和私有方法。由于TC39委员会内部存在分歧,这些功能在最初版本中被取消。有三个规范草案打算在不久的将来将这些功能引入到 JavaScript 类中。


一旦这些规范被正式接受,就可以使用“#”符号来定义私有字段和私有方法。之所以决定使用‘#’符号而不是传统的下划线“_”,是为了避免对现有库造成太大影响,现在的库已经使用下划线来标记私有字段。


尽管现有的库使用下划线将字段或方法标记为私有,但开发人员仍然可以访问它们。将这些变量变成真正的私有可能会破坏很多现有的应用程序,从而降低新规范的采用速度。


React 中的一些东西可以用来说明这个问题。React 是一个流行的 JavaScript 框架,它不得不使用一些直白的变量名来阻止开发人员使用它们(尽管这些变量名被标记为私有),比如“_SECRET_DOM_DO_NOT_USE_ORYOU_WILL_BE_FIRED”。


TC39 的每个提案分别与类私有字段和私有方法的某个方面有关。不过将它们作为一个整体提案应该是没问题的,因为它们很可能同时被添加到 JavaScript 中。提案内容如下:

类字段声明

目前在 JavaScript 中还不能直接定义类字段,开发人员是在构造函数中定义这些字段的。


class Counter {   constructor() {     this.xValue = 0;   } }
复制代码


该提案增加了直接在类中定义公共和私有字段的能力。


class Counter {   xValue = 0;  #yValue = 0;  constructor() { }}
复制代码

类的私有方法和 GETTER/SETTER 方法

该提案与私有方法的添加和私有 getter/setter 的使用有关。


class Counter {   get #x() { return #xValue; }   set #x(value) { }
#clicked() { } }
复制代码

类的静态特性

该提案定义了私有和公共静态字段/方法的使用方式。


class CustomDate {   static public() = {}   static #private() = {} }
复制代码


需要注意的是,过度使用私有字段和私有方法可能会对代码库造成不利影响。私有方法不能使用单元测试进行测试,并且通常带有单一职责原则固有的问题。


私有字段和私有方法还没有正式被 JavaScript 接受,但开发人员已经可以在 Babel 中使用它们了。TypeScript 的实现版本目前正在开发当中,未来会发布。


原文链接


Coming Next, JavaScript Private Class Fields & Methods


2019-10-15 16:202660
用户头像

发布了 731 篇内容, 共 479.9 次阅读, 收获喜欢 2008 次。

关注

评论 2 条评论

发布
用户头像
很奇怪。。。typescript 一开始就有private,public 还有protected 字段。不管如何定义,编译到的es5的版本的js,都可以参与单元测试的吧。
2019-10-16 20:10
回复
typescript只是在自己的环境下,自己特色的东西才有对应的限制,如果编译成标准js后一样要符合js的标准,所有ts的特性就是失效的,并不冲突呀
2019-11-11 15:02
回复
没有更多了
发现更多内容

揭秘快手商品详情数据接口:数据驱动的商业决策新利器

tbapi

快手商品详情数据接口 快手API接口 快手商品数据采集

利用财务工具实现企业不同阶段的有效规划

智达方通

全面预算管理 预算管理 财务预算

基于快照的异步远程复制介绍

天翼云开发者社区

Java 前端 rbd

Java/OC 语言知识讲解:反射与回调

测吧(北京)科技有限公司

测试

欢迎来到 Mint Expedition:Web3 和 NFT 的新时代开始

NFT Research

blockchain NFT\

Autobots应用探索:实践中的思考与发现

京东科技开发者

从校招新星到前端技术专家的成长之路

京东科技开发者

京东按图搜索商品新视角:jd.item_search_img API返回值解读

技术冰糖葫芦

API 安全 API 文档 API 开发 API 协议

Python循环控制

不在线第一只蜗牛

Python

没有它,你的Scrum无法实现!

敏捷开发

项目管理 Scrum 敏捷开发

deepin Meetup 上海站回顾,揭秘如意玲珑(Linyaps)升级“内幕” | 附 PPT下载

nn-30

Linux 开源 操作系统 deepin deepin V23

为什么从 Demo 测试开始上手

测吧(北京)科技有限公司

测试

云灾备场景

天翼云开发者社区

公有云 容灾场景

S3基准测试工具 - Warp使用简介

天翼云开发者社区

测试 S3 开源云工具

etl 常用数据类型转换 元数据配置说明

weigeonlyyou

Go 大数据 物联网 ETL MySQL 8.0

天润融通用小改进,盘活大资产

天润融通

人工智能 天润融通

某新员工大量使用Lambda表达式,老员工喷是炫技

源字节1号

小程序 开源 前端 后端

Objective-C 语言基础知识:编写测试代码

测吧(北京)科技有限公司

测试

TaD+RAG-缓解大模型“幻觉”的组合新疗法

京东科技开发者

rbd常用的配置参数

天翼云开发者社区

rbd 配置参数

官宣!玲珑项目升级,如意玲珑(Linyaps)全新启航!

nn-30

Linux 开源 操作系统 deepin deepin V23

什么是云抄表?

源字节1号

小程序 开源 后端‘’

第三季度加密市场动荡:市场缺乏炒作题材,波动加剧

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

AI大模型深度对比:腾讯混元大模型 VS 百川大模型

幂简集成

AI API 大模型

Web 应用框架环境安装指南

测吧(北京)科技有限公司

测试

抖音商品详情API实战指南:轻松获取并利用商品数据

tbapi

抖音商品数据采集 抖音API 抖音数据采集 抖音商品详情接口

接入单元测试框架:原理与执行流程介绍

测吧(北京)科技有限公司

测试

在 Xcode 中运行和调试单元测试:使用 Debug 和日志

测吧(北京)科技有限公司

测试

JavaScript即将加入私有字段和私有方法_编程语言_Guy Nesher_InfoQ精选文章