写点什么

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

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

关注

评论 2 条评论

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

Mysql的事务操作问题

恒山其若陋兮

MySQL 5月月更

在线URL解码还原工具

入门小站

工具

Python 实现设计模式之工厂模式

宇宙之一粟

Python 设计模式 工厂模式 5月月更

上海疫情封控期间,模拟芯片巨头变相裁员后续:补偿是不可能补偿的!

IC男奋斗史

职业规划 裁员 芯片

# Java基础复习(DayEight

爱好编程进阶

程序员 后端开发

在线TSV转Excel(xls/xlsx)

入门小站

工具

第八周作业

Asha

Intellij官方中文语言包,它来了

FunTester

java内存模型之重排序

急需上岸的小谢

5月月更

《对线面试官》 JavaNIO

Java3y

Java 开源 编程语言 语言 & 开发 5月月更

k8s client-go源码分析 informer源码分析(2)-初始化与启动分析

良凯尔

容器 云原生 #Kubernetes# Client-go

以购物车为例探讨 Flutter 的状态管理的必要性

岛上码农

flutter ios开发 安卓开发 跨平台应用 5月月更

nginx配置系列(十)代理服务(proxy_pass)

乌龟哥哥

5月月更

正向代理与反向代理

HoneyMoose

14-Docker 镜像安装实践

爱好编程进阶

Java 程序员 后端开发

linux时间格式化命令

入门小站

Linux

【PIMF】OpenHarmony啃论文俱乐部——拼音输入法原理_从触摸事件到汉字

离北况归

OpenHarmony Openharmony啃论文俱乐部 OpenHarmony应用开发 PIMF团队

网站开发进阶(四十四)input type=“submit“ 和“button“的区别

No Silver Bullet

5月月更 button submit

01-初识Git

爱好编程进阶

Java 程序员 后端开发

Nginx 和 Apache 配置 SSL 文件签名的不同

HoneyMoose

网站开发进阶(三十九)重磅推出:优良的编码风格!

No Silver Bullet

5月月更 编码风格

Docker下的Spring Cloud三部曲之三:在线横向扩容

程序员欣宸

Spring Cloud java 5月月更

TypeScript 里的 Reference Type 和 Triple-Slash Directives

汪子熙

typescript 编程语言 angular 5月月更 directive

【刷题第2天】买卖股票的最佳时机

白日梦

5月月更

2021年金三银四必问的1000道Java面试题及答案整理

爱好编程进阶

Java 程序员 后端开发

用阅读和写作应对未来风险

石云升

写作 阅读 5月日更

11月数据库排行:PostgreSQL起飞、三巨头分数持续低迷

爱好编程进阶

程序员 后端开发

【Python】题集 of ①

謓泽

5月月更

16个 Redis 常见使用场景,面试有内容聊啦

爱好编程进阶

Java 程序员 后端开发

2020年春招复盘:技术三面+HR面

爱好编程进阶

Java 程序员 后端开发

2021年最新版阿里、腾讯、美团300道Java初级

爱好编程进阶

程序员 后端开发

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