写点什么

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

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

关注

评论 2 条评论

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

产品开发的早期阶段,是选择开发app还是小程序?

开源直播系统源码

软件开发 APP开发 小程序开发 直播源码

2022第十四届南京国际人工智能产品展会

InfoQ_caf7dbb9aa8a

人工智能

顺应医改,积极布局——集采背景下的高值医用耗材发展洞察2022

易观分析

医用耗材

统一认证中心 Oauth2 认证坑

Damon

6月月更

直播预告 | 解构OLAP!新型多维分析架构范式全公开!Apache Doris 将带来五个重磅议题!

SelectDB

数据库 OLAP MPP Apaache Doris 直播活动

【大咖秀】博睿数据眼中的AIOps,选择正确的赛道正确的人

博睿数据

AIOPS 智能运维 博睿数据

如何用Pygame制作简单的贪吃蛇游戏

行者AI

这几个垂直类小众导航网站,你绝对不会想错过

小炮

数仓的基本概念

五分钟学大数据

数据仓库 6月月更

洞见科技入选「爱分析· 隐私计算厂商全景报告」,获评金融解决方案代表厂商

洞见科技

隐私保护 隐私计算 数据流通

2022第十五届南京国际工业自动化展览会

InfoQ_caf7dbb9aa8a

一次主从表集成流程开发过程

agileai

数据同步 企业服务总线 预置样例 集成流程 主从服务

Linux 之父亮相,OpenCloudOS 社区开放日来了

腾讯安全云鼎实验室

作为程序员,对于底层原理真的有那么重要吗?

C++后台开发

后端开发 Linux服务器开发 C++后台开发 底层原理 底层开发

2022第十四届南京国际人工智能产品展会

InfoQ_caf7dbb9aa8a

2022南京智博会 第十四届南京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

企业如何提升文档管理水平

小炮

Meta公司新探索 | 利用Alluxio数据缓存降低Presto延迟

Alluxio

facebook 数据缓存 presto Alluxio meta

音视频处理三剑客之 AEC:回声产生原因及回声消除原理

ZEGO即构

回声消除 3A算法 音视频课程

Cube 技术解读 | Cube 渲染设计的前世今生

阿里巴巴终端技术

ios android 渲染 跨端

自助洗车加盟具体都有哪些优势

共享电单车厂家

自助洗车加盟

自助洗车加盟前要准备些什么吗

共享电单车厂家

自助洗车加盟 自助洗车品牌

焱融看|混合云环境下,如何实现数据湖最优存储解决方案

焱融科技

乘风破浪,探索数据可视化开发平台FlyFish开源背后的秘密!

云智慧AIOps社区

前端开发 低代码 数据可视化 大屏可视化 优秀开源项目

推荐一个好用的设计师导航网址

小炮

Mass区块链哈希娱乐游戏开发平台搭建

开发微hkkf5566

2022南京国际智慧工地装备展览会

InfoQ_caf7dbb9aa8a

项目那么多为何要选择自助洗车

共享电单车厂家

自助洗车加盟

想加盟自助洗车不知道一般啥流程

共享电单车厂家

自助洗车加盟

新思科技助力以色列Visuality Systems推进安全“左移”

InfoQ_434670063458

软件开发 代码 新思科技 安全测试 安全左移

2022第十五届南京国际数字化工业博览会

InfoQ_caf7dbb9aa8a

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