Class Field 为什么 有争议?

简要看了一下Stage3的 Class Field提案,以及被卡住的原因

很意外的是,Class Field 在社区中,尤其是中文社区中的反对声音很大,几乎伴着提案进入Stage3。

反对的理由是因为:
Class Field颠覆了对象是一个属性集的传统定义,采用字段来定义类包含的东西,
引入了下述:
新的语法分析标记
新的规范类型
新的环境记录
新的对象成员结构

并且,因为字段的特性,选用了混沌时期的1.0版本时的mixin,类抄写的继承机制,颠覆了原型继承的基石,而将JS拉入真正的面向对象

这将导致,字段本身将代替属性,淘汰之前的写法
let obj={name:wzt,age:19}

后来的写法将变为:
let obj={name=wzt,age=19}

初看之下只是把冒号变为了等号,但实际上,原来对象中的,是一个字符串,就像map中的key一样,但是现在等号前面的,却类似于标识符,相当于声明的变量/常量

这将使之前很多JS之前修修补补的特性变得无意义,比如可计算属性,下标存取语法等等,也将使得JS内置对象之间的原型链变得无意义

尽管如此,就像You don't know JS的作者,并不太喜欢class语法一样。这个提案一直被卡在stage3,国内也不太认可。

但,JS的未来,如果是轻量级的应用,使用Object.create()的原型委托模式也绰绰有余。

如果是大型应用,就必须处理封装和多态这两个核心问题。这个提案本身也希望一劳永逸的解决封装这个问题

posted @ 2020-09-05 18:38  ProgrammerZT  阅读(661)  评论(0编辑  收藏  举报