GMTC全球大前端技术大会聚焦前端、移动、AI应用等领域15个热门专题方向,购票立减¥960 了解详情
写点什么

JavaScript 即将加入私有字段和私有方法

2019 年 10 月 15 日

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

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

关注

评论 2 条评论

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

Web安全

Machine Gun

数字签名在信息安全是什么?

Machine Gun

网络安全 信息安全 WEB安全 数字签名

微信业务架构和学生管理系统架构设计

鹿洺

架构实战营

test

大肚皮狒狒

遭GitHub连夜封杀下架?被泄露的阿里内部Java面试手册到底有多强?

Java架构师迁哥

再聊 TCP backlog

AI乔治

Java 架构 TCP TCP/IP

由 JVM Attach API 看跨进程通信中的信号和 Unix 域套接字

AI乔治

Java 架构 jdk JVM

抖音春晚幕后 | 支撑 12 亿红包雨的云原生基础设施

火山引擎

数据库 分布式 云原生 边缘计算

微信业务架构图&学生管理系统

刘敏

架构实战营模块 1 作业

Lukefang

架构实战营

什么!?金三银四,2021年阿里最新面试题惨遭泄露?

Java成神之路

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

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

阿里巴巴云原生

Java 云原生 监控 存储 消息中间件

聪明人的训练(七)

Changing Lin

四月日更

企业与员工的三种共同体关系

石云升

28天写作 职场经验 管理经验 4月日更

2021金三银四程序员面试必问总结

Java架构师迁哥

架构实战营模块一作业

梦寐凯旋

Flink程序结构与数据流

大数据技术指南

flink 4月日更

2021版最新!字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java成神之路

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

保护云管理控制台的5个最佳实践

龙归科技

云计算 安全 风险管理

c语言思维地基搭建(c语言介绍)

-jf.

学习笔记 大学作业 四月日更

刚火了的中台转头就拆,一大波公司放不下又拿不起来!

小傅哥

Java 架构 中台 小傅哥 海盗奇兵

# 模块1作业

灯火阑珊

架构实战营 作业1

solider

架构实战营模块一 作业

我叫大法师

二本渣渣辛酸面试之旅:5面阿里Java岗侥幸上岸,定级P6

神奇小汤圆

Java 编程 程序员 架构 面试

第一周作业

Damon

架构实战营 | 模块一 | 作业

curtis

HW Y7 2018

无名

​程序员的二十多个防猝死指南小妙招

Java架构师迁哥

架构实战营模块1第1课-学习总结

吴建中

架构实战营

如何在 Mac 下用 Clion 调试 MySQL 源码

AI乔治

Java MySQL 架构 调优

大数据技术升级脉络及认知陷阱

大数据技术升级脉络及认知陷阱

JavaScript即将加入私有字段和私有方法-InfoQ