写点什么

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

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

关注

评论 2 条评论

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

sql task01 环境搭建

橙橙橙橙汁丶

数据同步系统重构实践

Qunar技术沙龙

数据库 ES canal 数据同步 Kafk

深耕基础软件,华为开源加速“新全球化

科技热闻

事事请示是不靠谱的表现

boshi

团队管理

Python代码阅读(第10篇):随机打乱列表元素

Felix

Python 编程 Code Programing 阅读代码

超级人脉:让巴菲特老爷子告诉你圈子的重要性

非著名程序员

人脉 认知提升 思维 8月日更

漏洞挖掘的快乐你想象不到

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

《程序员修炼之道 - 从小工到专家》吐血解读

博文视点Broadview

面向对象的原则是普遍适用么?

escray

学习 极客时间 如何落地业务建模 8月日更

你的日志打印对了么?

神策技术社区

数据分析 日志

学习笔记: JPA与Hibernate

yhrivory

数据库 hibernate jpa ORM spring data

Linux云计算-使用 MyCat 实现 MySQL 主从读写分离

学神来啦

MySQL 数据库 Linux 运维

爬虫遇到反爬机制怎么办? 看看我是如何解决的!

Python研究者

8月日更

稳了!工业质检蝉联第一

百度大脑

智能制造

架构实战营 毕业总结

Dylan

架构实战营

区块链交易所搭建,币币交易系统搭建

交易所市值管理机器人开发

Geek_23f0c3

去中心化交易所系统开发 市值管理机器人系统开发 做市机器人 去中心化市值管理机器人

DAPP智能合约搭建|DAPP波场智能合约开发

量化系统19942438797

智能合约 dapp

一个小而美的 Swift 框架:Then

fuyoufang

swift iOS Developer 8月日更

运用上游思维的七个思路

石云升

读书笔记 8月日更 上游思维

一群人的战斗

神策技术社区

编程 代码

Vue进阶(三十八):v-for 中 :key 到底有什么用?

No Silver Bullet

Vue key 8月日更

合约量化交易系统开发技术

薇電13242772558

区块链

借助云网融合优势,某省运营商打造下一个十年增长引擎

BoCloud博云

云管理

如何在FL Studio中对整首歌曲音量进行调整

懒得勤快

从小白程序员到大厂高级技术专家我看过哪些书籍?

冰河

学习 程序员 面试 程序人生

云原生-工作流引擎Zeebe

QiLab

云原生 k8s cncf BPM zeebe

【音视频】弱网下实时视频的极限通信

声网

音视频 视频处理 视频压缩

数据上报方式是否存在最优解?

神策技术社区

编程 数据

vue入门:简单指令介绍

小鲍侃java

8月日更

手势事件采集究竟有多难?

神策技术社区

ios 手势

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