2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论 2 条评论

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

从微服务应用于技术栈,了解华为云微服务应用

华为云开发者联盟

微服务 服务 云技术

数字化时代App们将何去何从?

FinClip

MySQL-技术专题-LEFT JOIN避坑指南

码界西柚

区块链技术应用开发、区块链版权应用搭建解决方案

t13823115967

区块链技术应用开发 区块链版权搭建解决方案

uml图中各种线的关系

胡云飞

极客大学架构师训练营 UML

接口测试和功能测试的区别

测试人生路

软件测试

跨语言跨平台聚合OpenAPI文档从来没有这么简单过

Knife4j

微服务 OpenAPI Knife4j Knife4jAggregation

架构师训练营 1 期 - 第十周 - 模块分解

三板斧

极客大学架构师训练营

美妆行业:低代码全域客户数据采集,赋能数据化运营

Linkflow

营销数字化 客户数据平台 CDP

前端高效开发必备的 js 库梳理

徐小夕

Java GitHub 大前端 js

物化视图如何快速完成数据聚合操作?

VoltDB

数据库 数据分析 sql

从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计

华为云开发者联盟

数据库 数据仓库 数据

五年时间完成业务数字化转型,华为如今做得怎么样了?

华为云开发者联盟

效率 提升 数字化

私域流量运营03|衡量企业运营视频号的4个关键指标

Linkflow

客户数据平台 客户画像 视频号

SpringBoot-技术专题-如何提高吞吐量

码界西柚

以 Kubernetes 为代表的容器技术,已成为云计算的新界面

阿里巴巴云原生

云计算 Kubernetes 容器 云原生

京东智能客服品牌焕新:“言犀”亮相2020京东JDD大会

京东科技开发者

大数据 AI 知识图谱

2020年10月北京BGP机房网络质量评测:流水的其他,铁打的世纪互联?

博睿数据

机房 评测

京东集团技术委员会主席周伯文:推进产业数智化发展需要技术和生态两把“桨”

京东科技开发者

区块链 大数据 AI 物联网,

.net5发布,.NET会就此“支棱起来”吗?

Philips

.net 敏捷开发 .net core

大厂经验:一套Web自动曝光埋点技术方案

阿亮

埋点 曝光埋点 点击埋点 自动化埋点

距离 2020 年结束不到2个月,字节跳动员工却在闲鱼卖内推名额登上热搜!

Java架构师迁哥

Mybatis日志功能是如何设计的?

Java架构师迁哥

第十周 模块分解 总结

三板斧

极客大学架构师训练营

区块链医疗、电子票据应用落地开发解决方案

t13823115967

电子票据 区块链医疗

26张图带你彻底搞懂volatile关键字的底层实现

小牛

volatile 后端 多线程 并发 Java 分布式

中小型企业创业的福音

anyRTC开发者

创业 音视频 WebRTC RTC

京东千亿订单背后的纵深安全防御体系

京东科技开发者

安全 网络 云服务 云安全

阿里内部11月最新出台Spring Cloud架构设计+程序开发+运维部署

Java架构追梦

Java 阿里巴巴 架构 微服务 SpringCloud

2020年9月北京BGP机房网络质量评测:天地祥云木樨园力压群芳终进前三

博睿数据

机房 评测

MyBatis-技术专题-拦截器原理探究

码界西柚

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