写点什么

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:202556
用户头像

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

关注

评论 2 条评论

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

超越界限:大模型应用领域扩展,探索文本分类、文本匹配、信息抽取和性格测试等多领域应用

汀丶人工智能

信息抽取 自然语言模型 大语言模型 ChatGLM-6B 文本匹配

如何优雅的给柯里化函数添加类型标注

汽车之家客户端前端团队

函数柯里化

干货分享|可证明安全的隐私计算

隐语SecretFlow

大数据 AI 安全 隐私保护 隐私计算

SUI 将通过 SUI Foundation 资助 Footprint Analytics 解析其公链数据,为生态系统提供支持

Footprint Analytics

区块链 公链

华为云数智新消费创新峰会2023,我们在这里!

云智慧AIOps社区

人工智能 运维 大模型 GPT

揭秘YouTube 的环境模式发光效果

汽车之家客户端前端团队

CSS youtube

如何维护大型 Next.js 应用程序

汽车之家客户端前端团队

next

GPU荒漠,算力短缺背后的时间竞赛与解决方案|TE解读

TE智库

人工智能 AI gpu 算力

企业网络安全守护神-行云管家堡垒机!

行云管家

运维 网络安全 数字化 堡垒机

支付宝小程序云效能:四大基于小程序生态的解决方案

TRaaS

开发者必看:深度解读隐语密态计算设备 SPU

隐语SecretFlow

大数据 AI 隐私计算 开源社区 密态计算

万字详解云计算中的云网络技术

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

站在源码的角度看多人语音厅房间系统

山东布谷网络科技

直播源码

区块链上地址与银行账户有什么区别?

BSN研习社

大型集团企业数据治理方案,以“应用驱动”的数据治理策略 | 行业方案

袋鼠云数栈

大数据 数字化转型

让大数据平台数据安全可见-行云管家

行云管家

大数据 数字化 数据安全 大数据平台

Kurator,你的分布式云原生解决方案

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

开箱即用!教你如何正确使用华为云CodeArts PerfTest!

华为云PaaS服务小智

云计算 软件开发 性能测试 华为云

隐私计算技术|私有信息检索(PIR)及其应用场景

隐语SecretFlow

大数据 AI 隐私计算 开源社区 私有信息检索

亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 8 月 PK 榜

OpenHarmony 分布式硬件关键技术

OpenHarmony开发者

OpenHarmony

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