写点什么

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

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

关注

评论 2 条评论

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

Vite打包碎片化,如何化解?

不在线第一只蜗牛

Java 前端 服务器

供应链PC实操落地实践|得物技术

得物技术

#供应链

PostgreSQL 可观测性最佳实践

观测云

postgresql

QCA9880 3x3 MIMO Wi-Fi Solution: Backward Compatible, High Power Output, and RoHS Compliant

wallyslilly

QCA9880 QCA9882

独占鳌头!望繁信科技三大流程挖掘项目入选中国信通院优秀案例

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能 望繁信科技

第二届OpenHarmony竞赛训练营颁奖 ——创新驱动,培育未来科技人才

科技热闻

2024后量子区块链峰会:连接Web3、安全与后量子密码学的未来

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

测试聊并发-入门篇

京东科技开发者

SD-WAN与传统WAN的区别

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

什么是低代码(Low-Code)?我们需要低代码吗?

优秀

低代码 低代码平台 低代码平台比较

Spring 实现 3 种异步流式接口,干掉接口超时烦恼

不在线第一只蜗牛

Java spring 后端

【IoTDB 线上小课 08】时序数据库融合 AI,带来的效果竟然是?

Apache IoTDB

DeFi复兴:让DeFi再次伟大

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

深入探索阿里巴巴关键字搜索商品API的返回值

技术冰糖葫芦

API 接口 API 文档 API 测试 API 性能测试

阿里巴巴1688商品详情API返回值:未来发展趋势与无限可能

代码忍者

体育直播系统开发方案:从架构到功能,一次性搞懂!

软件开发-梦幻运营部

从混乱到可控:非结构化数据在远程监造中的作用

奇点云

人工智能 软件 IT 制造业

IT服务管理三重奏:SLA、SLO、SLI

ServiceDesk_Plus

SLA IT服务管理

软件测试学习笔记丨Selenium—执行javascript脚本

测试人

软件测试

第三届OpenHarmony技术大会开发框架分论坛成功举行

科技热闻

技术干货|企业如何通过创建可持续能源的数字孪生,实现即时洞察

Altair RapidMiner

人工智能 汽车 数字孪生 仿真 altair

看不懂来打我!让性能提升56%的Vue3.5响应式重构

快乐非自愿限量之名

JavaScript vue.js 性能优化 前端

OpenTiny 邀你一起参与线下技术交流茶话会!

OpenTiny社区

低代码 OpenTiny Vue组件库 前端开源

查找大量时序遥感文件缺失、不连贯的成像日期:Python代码

快乐非自愿限量之名

Python GIS

深入理解Java并发读写锁——ReentrantReadWriteLock

EquatorCoco

Java spring 开发语言

90后程序员的职业成长漫谈

京东科技开发者

90年程序员,失业了应该继续找工作吗?

高端章鱼哥

海外专线:提升国外网站访问效率的方法

Ogcloud

企业组网 企业网络 海外网络专线 海外网络访问

解读Kuasar多沙箱容器技术,带来更强隔离性和安全性

华为云开发者联盟

Kubernetes 容器 沙箱

通过Forcebot压测实践简述“并发模式”与“RPS模式”两种模式的区别

京东科技开发者

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