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

儘管JavaScript在2015年就有了類,但仍然沒有私有字段和私有方法。由於TC39委員會內部存在分歧,這些功能在最初版本中被取消。有三個規範草案打算在不久的將來將這些功能引入到JavaScript類中。

一旦這些規範被正式接受,就可以使用“#”符號來定義私有字段和私有方法。之所以決定使用‘#’符號而不是傳統的下劃線“_”,是爲了避免對現有庫造成太大影響,現在的庫已經使用下劃線來標記私有字段。

儘管現有的庫使用下劃線將字段或方法標記爲私有,但開發人員仍然可以訪問它們。將這些變量變成真正的私有可能會破壞很多現有的應用程序,從而降低新規範的採用速度。

React中的一些東西可以用來說明這個問題。React是一個流行的JavaScript框架,它不得不使用一些直白的變量名來阻止開發人員使用它們(儘管這些變量名被標記爲私有),比如“_SECRET_DOM_DO_NOT_USE_ORYOU_WILL_BE_FIRED”。

TC39的每個提案分別與類私有字段和私有方法的某個方面有關。不過將它們作爲一個整體提案應該是沒問題的,因爲它們很可能同時被添加到JavaScript中。提案內容如下:

類字段聲明

目前在JavaScript中還不能直接定義類字段,開發人員是在構造函數中定義這些字段的。

class Counter { 
  constructor() { 
    this.xValue = 0; 
  } 
}

該提案增加了直接在類中定義公共和私有字段的能力。

class Counter { 
  xValue = 0;
  #yValue = 0;
  constructor() { }
}

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

該提案與私有方法的添加和私有getter/setter的使用有關。

class Counter { 
  get #x() { return #xValue; } 
  set #x(value) { }

  #clicked() { } 
}

類的靜態特性

該提案定義了私有和公共靜態字段/方法的使用方式。

class CustomDate { 
  static public() = {} 
  static #private() = {} 
}

需要注意的是,過度使用私有字段和私有方法可能會對代碼庫造成不利影響。私有方法不能使用單元測試進行測試,並且通常帶有單一職責原則固有的問題。

私有字段和私有方法還沒有正式被JavaScript接受,但開發人員已經可以在Babel中使用它們了。TypeScript的實現版本目前正在開發當中,未來會發布。

原文鏈接

Coming Next, JavaScript Private Class Fields & Methods

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章