Js即将加入私有字段和私有方法
尽管 JavaScript 在 2015 年就有了类,但仍然没有私有字段和私有方法。由于 TC39 委员会 内部存在分歧,这些功能在最初版本中被取消。有三个规范草案打算在不久的将来将这些功能引入到 JavaScript 类中。
一旦这些规范被正式接受,就可以使用“#”符号来定义私有字段和私有方法。之所以决定使用‘#’符号而不是传统的下划线“_”,是为了避免对现有库造成太大影响,现在的库已经使用下划线来标记私有字段。
尽管现有的库使用下划线将字段或方法标记为私有,但开发人员仍然可以访问它们。将这些变量变成真正的私有可能会破坏很多现有的应用程序,从而降低新规范的采用速度。
react 中的一些东西可以用来说明这个问题。React 是一个流行的 JavaScript 框架,它不得不使用一些直白的变量名来阻止开发人员使用它们(尽管这些变量名被标记为私有),比如“_SECRET_dom_DO_NOT_USE_ORYOU_WILL_BE_FIRED”。
TC39 的每个提案分别与类私有字段和私有方法的某个方面有关。不过将它们作为一个整体提案应该是没问题的,因为它们很可能同时被添加到 JavaScript 中。提案内容如下:
类字段声明
目前在 JavaScript 中还不能直接定义类字段,开发人员是在构造函数中定义这些字段的。
classCounter{
constructor() {
this.xValue =0;
}
}
该提案增加了直接在类中定义公共和私有字段的能力。
classCounter{
xValue =0;
#yValue =0;
constructor() { }
}类的私有方法和 GETTER/SETTER 方法
该提案与私有方法的添加和私有 getter/setter 的使用有关。
class Counter {
get#x(){ return #xValue; }
set#x(value){ }
#clicked(){ }
}类的静态特性
该提案定义了私有和公共静态字段 / 方法的使用方式。
classCustomDate{
staticpublic()= {}
static#private() = {}
}
需要注意的是,过度使用私有字段和私有方法可能会对代码库造成不利影响。私有方法不能使用单元测试进行测试,并且通常带有单一职责原则固有的问题。
私有字段和私有方法还没有正式被 JavaScript 接受,但开发人员已经可以在 babel 中使用它们了。TypeScript 的实现版本目前正在开发当中,未来会发布。
原文链接:Coming Next, JavaScript Private Class Fields & Methods
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!