写点什么

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

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

关注

评论 2 条评论

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

全面到哭!阿里内部疯传Netty实战文档程序员必须人手一份

比伯

Java 编程 架构 程序人生 编程语言

BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux

Java架构之路

Java 程序员 架构 面试 编程语言

13.5大数据分析与可视化

张荣召

13.2大数据计算引擎Spark(下)

张荣召

淘宝|蚂蚁|菜鸟|盒马|滴滴|饿了么面经,已拿多个offer(Java岗)

Java架构之路

Java 程序员 架构 面试 编程语言

盘点2020 | 大龄程序员的进化(从自由职业者到讲师)

王磊

盘点2020

13.8推荐引擎算法

张荣召

13.4大数据基准测试工具HiBench

张荣召

66把锁的门禁系统,告诉你区块链的特点

CECBC

区块链

Spark的分布式存储系统BlockManager全解析

华为云开发者联盟

spark 分布式 存储

2020年度综合大盘点:火爆IT业的7大Java技术,每一项都是大写的“牛逼”!

Java 编程 微服务

13.7分类聚类算法

张荣召

英特尔下一代10nm Ice Lake处理器登陆腾讯云,星星海自研二路服务器内“芯”强大

E科讯

天天CRUD,被领导怼,我是如何从小公司菜鸡到阿里P8架构师?,首次分享Java程序员黄金五年进阶心得

Java架构之路

Java 程序员 架构 面试 编程语言

Vmware+Centos设置静态IP

千泷

13.9机器学习与神经网络

张荣召

Alibaba技术专家必知必会的Java技术知识点,掌握这些理论+实践+技术是你通往阿里的路

Java架构之路

Java 程序员 架构 面试 编程语言

AlibabaP8架构师整理,283页的Java核心资料pdf文档,学会后月薪4W没问题

Java架构之路

Java 程序员 架构 面试 编程语言

盘点2020 | 2020年读过的这些书

xcbeyond

读书感悟 盘点2020 七日更

敏捷规划,让你做一个有计划的开发人

华为云开发者联盟

敏捷 开发 规划

13.10作业

张荣召

如果云是水滴,Kubernetes就是水滴管理平台

华为云开发者联盟

云计算 管理 k8s

年轻人不讲武德,乱用索引,你到底走了多少弯路?

比伯

Java 编程 架构 面试 程序人生

13.6网页排名算法PageRank

张荣召

13.3流处理计算:Flink,Storm,Spark Streaming

张荣召

未来30年推动全球经济增长的主要动力是数据资产

CECBC

区块链 移动互联网

公安大数据:警务大数据分析系统解决方案

t13823115967

智慧公安

关于代码重构的灵魂三问:是什么?为什么?怎么做?

华为云开发者联盟

重构 代码 代码重构

iOS面试基础知识 (三)

iOSer

ios 面试 ios开发

13.1大数据计算引擎Spark(上)

张荣召

DDIA 读书笔记(7)分布式系统的问题

莫黎

读书笔记 分布式系统

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