写点什么

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

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

关注

评论 2 条评论

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

Linux面试必备

袁袁袁袁满

三周年连更

华为云桌面,如何为企业构建新型工作方式

平平无奇爱好科技

摆脱终端束缚,华为云桌面助力企业数字化转型

平平无奇爱好科技

灵活高效,华为云桌面实现随时随地办公

YG科技

Oracle apex社区教程 PLSQL常用时间函数

back_wang

oracle apex

Downie下载vip会员视频教程?Downie4最新许可证

Rose

Downie下载 Downie使用教程 Downie 4许可证 Mac视频下载器 Downie破解版

photoshop 2023【存储为窗口显示空白、黑屏】解决方法

Rose

ps 2023储存黑屏 Photoshop 2023

TestNG 中使用 Guice 来进行依赖注入

HoneyMoose

跨平台应用开发进阶(五十五):uni-app 获取设备信息及 APP 报无相应权限问题分析及解决

No Silver Bullet

uni-app 跨平台应用开发 三周年连更 问题分析及解决 设备信息

面试官:介绍一下什么是缓存雪崩、缓存击穿、缓存穿透?

Java redis 缓存穿透 缓存击穿 缓存雪崩

NFT加密钱包交易系统开发搭建技术

薇電13242772558

NFT

Unity 之 关于停止协程的五种方式解析

陈言必行

Unity 三周年连更

Spring Boot之log4j2基础使用入门|超级详细,建议收藏

bug菌

Spring Boot log4j2 三周年连更

THREE.JS实现炫酷的3D简历网站

知心宝贝

前端 后端 3D ThreeJS 三周年连更

华为云大数据BI解决方案,助力企业数字化运营

平平无奇爱好科技

华为云桌面——云端上“最卷的云”

平平无奇爱好科技

从源码全面解析 ArrayBlockingQueue 的来龙去脉

Java 源码 ArrayBlockingQueue

AlDente免费版,限制 Macbook 最大充电量,保护电池健康

Rose

AlDente Mac版 AlDente macOS 充电量阈值

华为云CDN赋能企业数字化转型

YG科技

浅谈华为云CDN在互联网领域的应用场景落地

YG科技

Matlab实现粒子群算法

Shine

三周年连更

Shell脚本实战:Consul 服务注册和注销的最佳实践

小毛驴的烂笔头

Linux Shell

Oracle Apex学习之系统变量

back_wang

oracle ebs oracle apex

Qz学算法-数据结构篇(排序算法--基数、总结)

浅辄

数据结构 三周年连更

【直播回顾】数字化转型成为银行业发展的关键(下)

易观分析

数字化转型 银行

微服务 SpringBoot 整合 Redis GEO 实现附近商户功能

Bug终结者

java; Redis 核心技术与实战 三周年连更

达芬奇18补丁版下载 支持m1/m2/intel/win

Rose

DaVinci Resolve 18 达芬奇18破解版 视频剪辑调色软件

macOS 13 Ventura (苹果最新系统) v13.3.1正式版

Rose

macOS Ventura 苹果系统下载 Mac最新系统

华为云桌面随需而至,让办公数字化触手可及

平平无奇爱好科技

华为云CDN加速,赋能企业数字化转型升级

YG科技

复旦MOSS大模型开源了「中国版ChatGPT」,Github和Hugging Face同时上线

肥晨

三周年连更

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