上次掺和JavaScript的事,是说JavaScript语言有值的问题;再往前一年,就是在“红绿灯大战”中讨论Promise了。这细数起来,都是两三年前的旧事了。
但我还是跟进JavaScript的。最新近的事,是持续地讨论这个所谓“TC39提案”的事情。本以为真关心的人并不多,但前两天连老宋都转了篇贴子过来,“这帮人要把js折腾成啥样子啊”,老宋说。
“啥样子?”
1. 导致太下大乱的“Field提案”
“Field提案”全称是“proposal-class-fields”(在这里),是试图在类声明中添加“Fields”的一项语言设计。提案基本的想法是这样:
// 在类中声明字段(Field)
class Counter {
x = 0;
foo() {
console.log(this.x); // 0
}
}
这看起来并没有什么大不了,毕竟之前在类中只能声明方法,新方案可以直接为this.x
赋个初值,大家都很happy。
但“字段(Field)”是什么?没人鸟这个问题。
后来这个方案扩展了,提供了公开字段(Public fields)、私有字段(Private fields)等特性,并整合了种种有关于“类”的提案的思想,还提出了向前兼容类装饰器(decorators)等愿景,摇身一变,成了一个巨无霸方案。同时,也不可避免地在社区掀起了轩然大波:多达120余条issues,其中#100
高达300余条讨论,Git issues折了好几回才能加载完。
话说,我就是被这个issues入坑的。
那么,现在这个巨无霸的方案又在讲什么呢?它说起来就是提供了两个语法: