写点什么

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

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

关注

评论 2 条评论

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

2022年11月《中国数据库行业分析报告》重磅发布!精彩抢先看

墨天轮

人工智能 数据库 dba 智能运维 国产数据库

破坏系统是为了更稳定?混沌工程在去哪儿的4个阶段实践

TakinTalks稳定性社区

混沌工程 故障治理

数据治理必读|基于Dataphin,快速建设高质量数据支撑业务发展

瓴羊企业智能服务

个推TechDay治数训练营直播预告 | 从方法论到落地应用,详解企业标签体系建设要点

个推

标签 用户画像 标签体系

CSS 基础属性篇组成及作用

千锋IT教育

助力教育信创快速发展,统信软件与山东四所高校建立信创应用重点实验室

统信软件

软件 操作系统 教育 信创产业 教育新创

微服务调用的正确打开方式

Java全栈架构师

Java 程序员 面试 微服务 后端

解密金融行业数据云平台建设密码

数造万象

Baklib知识库|为什么知识共享工具对减少内部知识缺口至关重要

Baklib

知识

阿里云液冷技术荣获CDCC数据中心科技成果一等奖

云布道师

阿里云 基础设施建设

一发一存一消费,跟着p8大佬深入学习Java中间件技术及其应用开发

钟奕礼

Java 程序员 java面试 java编程

个推发布《Android13适配指南》,解读Android13新特性

个推

android 安卓 安卓开发

推荐5款IDEA插件,堪称代码质量检查利器!

程序员小毕

Java 程序员 程序人生 后端 IDEA

在线电子表格,助力数据分析人员高效办公

流量猫猫头

大数据

LigaAI X 猴子无限 | AIGC火了,人类又得到了什么?

LigaAI

分布式 大模型训练 研发协作平台 AIGC 大规模离散模型

远程触发Jenkins的Pipeline任务

程序员欣宸

jenkins 11月月更 pipiline

这份1658页的Java面试核心突击讲,成功让我上岸阿里

小二,上酒上酒

Java 程序员 面试 阿里 大厂面试

小伙伴面经分享京东+面试八股文整套面试真题(含答案)

钟奕礼

Java 程序员 java面试 java编程

手把手教你成为荣耀开发者:商户服务开通指南

荣耀开发者服务平台

android 开发者 手机 荣耀 honor

完全解析大数据的高可用集群部署

好程序员IT教育

大数据

跬智信息 (Kyligence) 荣获信创“大比武”重要奖项,坚持做大做实国产软件

Kyligence

数据库 数据分析 云平台技术

Java岗史上最全八股文面试真题汇总,堪称2022年面试天花板

小二,上酒上酒

Java 程序员 面试 八股文

测试自动化中遵循的最佳实践

禅道项目管理

自动化测试

工业物联网DCS和SCADA的区别

2D3D前端可视化开发

物联网 DCS web组态软件 SCADA 工业组态

案例 | 九科信息为某大型企业设计社保公积金自动缴存解决方案

九科Ninetech

阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会

小二,上酒上酒

Java 编程 程序员 nacos

自学 UI 设计有哪些书籍推荐

千锋IT教育

提升汽车APP用户体验,火山引擎APMPlus的“独家秘笈”

字节跳动终端技术

性能监控 APP开发 应用性能 火山引擎 APMPlus

超详细图文保姆级教程:App开发新手入门(一)

YonBuilder低代码开发平台

开发者 App 新手入门

EMR-StarRocks 与 Flink 在汇量实时写入场景的最佳实践

阿里云大数据AI技术

数据库 flink EMR 十一月月更

HDC 2022 开发者主题演讲与技术分论坛干货分享(附课件)

HarmonyOS开发者

HarmonyOS

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