昨天我们介绍了 的三个新特性,现在,一个广受期待的新特性:私有属性也离我们越来越近了。
昨天,TC39在GitHub上通过了一条EMCA 语法特性的草案,即类私有属性修饰符“#”,不过,该特性之前在社区的调研中遭遇了大量反对。
该修饰符的使用方式如下:
class Counter extends HTMLElement {
#x = 0;
clicked() {
this.#x++;
window.requestAnimation (this.render.bind(this));
}
constructor() {
super();
this. = this.clicked.bind(this);
}
connectedCallback() { this.render(); }
render() {
this.textContent = this.#x.toString();
}
}
window.customElements.define('num-counter', Counter);类的私有属性和方法使用“#”前缀作为修饰符,即代表该属性或方法作用域仅限于类的块级作用域内,你不能在之外对其进行引用。
该语法引起了社区大量反对,在该语法草案的一个issue内,有人做了一个调研,显示社区对于这条草案并不认同:
社区对这条草案的主要担忧包括:
- “#”是CSS中的id选择器,在JS中作为私有属性修饰符可能引起混乱,降低代码可读性
- “#”在部分编程语言里是作为注释的语法,JS里使用它会引起混乱
- Type 之前已经实现过私有属性,其修饰符为`private`,现在实现不一致造成认知负担
这一草案早在2017年7月已进入stage 3状态,要改变是很艰难的,TC39委员会之所以通过,是因为他们认为对于这一草案,委员会和社区已经达成共识,即使有开发者认为这一共识并不存在。
而委员会反对上面调研结果的理由是认为在GitHub issue去的该调研吸引的反对者偏多,该草案的赞同者大多不会到issue区表达意见。
另还有委员会成员在该issue下回答之所以不采用和Type 相同的实现,是要刻意与Type 保持不同,以免偏离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
亲爱的读者,对于这条特性你是支持还是反对呢?欢迎投票,以及在评论区留下你的看法。
继续阅读与本文标签相同的文章
下一篇 :
浅谈关于Python3中venv虚拟环境
-
十年磨一剑:从2009启动“去IOE”工程到2019年OceanBase拿下TPC-C世界第一
2026-05-16栏目: 教程
-
爬了各大搜索引擎,2019年Java面试题(集合+并发+调优+微服务)
2026-05-16栏目: 教程
-
Java修饰符
2026-05-16栏目: 教程
-
一个合格的程序员,需要哪些必备技能?
2026-05-16栏目: 教程
-
为什么Java字符串是不可变对象?
2026-05-16栏目: 教程
