GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

JavaScript 私有属性要来了,但实现方式惹争议

2018 年 10 月 17 日

昨天我们介绍了 JavaScript 的三个新特性,现在,一个广受期待的新特性:私有属性也离我们越来越近了。

昨天,TC39 在 GitHub 上通过了一条 EMCAScript 语法特性的草案,即类私有属性修饰符“#”,不过,该特性之前在社区的调研中遭遇了大量反对。

该修饰符的使用方式如下:

复制代码
class Counter extends HTMLElement {
#x = 0;
 
clicked() {
this.#x++;
window.requestAnimationFrame(this.render.bind(this));
}
 
constructor() {
super();
this.onclick = this.clicked.bind(this);
}
 
connectedCallback() { this.render(); }
 
render() {
this.textContent = this.#x.toString();
}
}
window.customElements.define('num-counter', Counter);

类的私有属性和方法使用“#”前缀作为修饰符,即代表该属性或方法作用域仅限于类的块级作用域内,你不能在之外对其进行引用。

该语法引起了社区大量反对,在该语法草案的一个 issue 内,有人做了一个调研,显示社区对于这条草案并不认同:

社区对这条草案的主要担忧包括:

  • “#”是 CSS 中的 id 选择器,在 JS 中作为私有属性修饰符可能引起混乱,降低代码可读性
  • “#”在部分编程语言里是作为注释的语法,JS 里使用它会引起混乱
  • TypeScript 之前已经实现过私有属性,其修饰符为`private`,现在实现不一致造成认知负担

这一草案早在 2017 年 7 月已进入 stage 3 状态,要改变是很艰难的,TC39 委员会之所以通过,是因为他们认为对于这一草案,委员会和社区已经达成共识,即使有开发者认为这一共识并不存在。

而委员会反对上面调研结果的理由是认为在 GitHub issue 去的该调研吸引的反对者偏多,该草案的赞同者大多不会到 issue 区表达意见。

另还有委员会成员在该 issue 下回答之所以不采用和 TypeScript 相同的实现,是要刻意与 TypeScript 保持不同,以免偏离 JS 的发展方向。

延伸阅读:

https://github.com/tc39/proposal-class-fields

https://github.com/tc39/proposal-class-fields/issues/100

https://github.com/tc39/proposal-class-fields/pull/140

亲爱的读者,对于这条特性你是支持还是反对呢?欢迎投票,以及在评论区留下你的看法。

2018 年 10 月 17 日 06:422705
用户头像

发布了 164 篇内容, 共 90.7 次阅读, 收获喜欢 380 次。

关注

评论 2 条评论

发布
用户头像
#真的没法看
2019 年 11 月 12 日 08:46
回复
没有更多了
发现更多内容

synchronized实现原理及代码证明各种锁

Darren

源码 synchronized 轻量级锁 偏向锁 Monitor

遇到银河提现不了网站维护审核怎么办?

丛林里的余光

数据库 网站平台 提现

马云:今天的区块链并没有被人们认识到价值!

CECBC区块链专委会

区块链 阿里巴巴 马云

聊聊开发工程师如何转型产品经理

长沙造纸农

程序员 开发者 产品经理 转型 中年危机

理解大端字节和小端字节

Dnnn

Linux命令netstat详解

Dnnn

教师节送什么老师最开心?程序员三招解决家长送礼难题!

华为云开发者社区

编程 程序

居然有人仅凭这份《Java面试宝典》就成功拿到了阿里、京东、字节跳动等大厂offer

Java成神之路

Java 编程 程序员 面试

URL 去重的 6 种方案!(附详细实现代码)

王磊

Java

第13周学习总结

刘卓

关于第四次财富狂潮的思考,区块链如猛虎出笼?

CECBC区块链专委会

比特币 区块链 数字货币

GO语言 MD5 四种实现方式

Dnnn

go

Redis哨兵(sentinel )机制讲解

Dnnn

TCP三次握手和四次挥手

Dnnn

Centos 上配置大数据环境

yuanhang

大数据

MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?

Dnnn

程序员快乐器之JAVA代码生成工具

Learun

敏捷开发 快速开发 生成代码

GO 语言异常处理

Dnnn

go

GO 语言交叉编译

Dnnn

go

如何设计Upload组件思考

赵孔磊

第13周作业

刘卓

PHP配置管理-yaconf

Dnnn

php

ZIP 也能边下载边解压?优酷流式解压技术揭秘

阿里文娱技术团队

ZIP

GO 语言超时实现

Dnnn

go

云栖大会边缘计算分论坛倒计时7天,这2点值得期待

阿里云Edge Plus

边缘计算

Go语言 sync.Mutex 源码分析

Dnnn

go

epoll的原理和流程

Dnnn

anyRTC推流小助手-客户端推流(PUSH RTMP)工具

anyRTC开发者

技术 音视频 WebRTC 直播 RTC

PHP Db类强制读主库(master)的设计

Dnnn

php MySQL

bit比特, Byte字节,基础知识

Dnnn

分布式追踪系统原理看不懂,40张图带你亲手实践

小Q

Java 架构 面试 分布式 系统设计

DNSPod与开源应用专场

DNSPod与开源应用专场

JavaScript私有属性要来了,但实现方式惹争议-InfoQ