首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript即将加入私有字段和私有方法

尽管JavaScript在2015年就有了类,但仍然没有私有字段和私有方法。由于TC39委员会内部存在分歧,这些功能在最初版本中被取消。有三个规范草案打算在不久的将来将这些功能引入到JavaScript类中。

一旦这些规范被正式接受,就可以使用“#”符号来定义私有字段和私有方法。之所以决定使用‘#’符号而不是传统的下划线“_”,是为了避免对现有库造成太大影响,现在的库已经使用下划线来标记私有字段。

尽管现有的库使用下划线将字段或方法标记为私有,但开发人员仍然可以访问它们。将这些变量变成真正的私有可能会破坏很多现有的应用程序,从而降低新规范的采用速度。

React中的一些东西可以用来说明这个问题。React是一个流行的JavaScript框架,它不得不使用一些直白的变量名来阻止开发人员使用它们(尽管这些变量名被标记为私有),比如“_SECRET_DOM_DO_NOT_USE_ORYOU_WILL_BE_FIRED”。

TC39的每个提案分别与类私有字段和私有方法的某个方面有关。不过将它们作为一个整体提案应该是没问题的,因为它们很可能同时被添加到JavaScript中。提案内容如下:

类字段声明

目前在JavaScript中还不能直接定义类字段,开发人员是在构造函数中定义这些字段的。

代码语言:javascript
复制
class Counter { 
  constructor() { 
    this.xValue = 0; 
  } 
}

该提案增加了直接在类中定义公共和私有字段的能力。

代码语言:javascript
复制
class Counter { 
  xValue = 0;
  #yValue = 0;
  constructor() { }
}

类的私有方法和GETTER/SETTER方法

该提案与私有方法的添加和私有getter/setter的使用有关。

代码语言:javascript
复制
class Counter { 
  get #x() { return #xValue; } 
  set #x(value) { }

  #clicked() { } 
}

类的静态特性

该提案定义了私有和公共静态字段/方法的使用方式。

代码语言:javascript
复制
class CustomDate { 
  static public() = {} 
  static #private() = {} 
}

需要注意的是,过度使用私有字段和私有方法可能会对代码库造成不利影响。私有方法不能使用单元测试进行测试,并且通常带有单一职责原则固有的问题。

私有字段和私有方法还没有正式被JavaScript接受,但开发人员已经可以在Babel中使用它们了。TypeScript的实现版本目前正在开发当中,未来会发布。

原文链接

Coming Next, JavaScript Private Class Fields & Methods

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/SMVyB6UqVuHFprzg1eXT
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券