簡體   English   中英

WeakMap和JavaScript ES6中的類的私有成員之間有什么區別嗎?

[英]Is there any difference between WeakMap and private member of a class in JavaScript ES6?

我試圖找出與WeakMap構造函數相比,在類中定義本地/私有屬性和方法之間的區別是什么?

將它們從外面隱藏起來的目的是相同的還是使用其他東西?

在此處輸入圖片說明

根據您當前的實現:

  • let x不是很有用,因為它只能在構造函數中引用。 不能在任何原型方法中使用。 另一方面,WeakMap可以在任何地方引用。 那是一個很大的區別。
  • 您的WeakMap可以在任何地方引用。 這意味着它實際上並沒有提供任何隱私。 引用實例的任何內容,WeakMap可能會訪問您想要私有的radius值。

如果希望WeakMap通過閉包適當地私有,則可以使用IIFE定義類,例如:

const myClass = (() => {
  const weakMap = new WeakMap();
  return class Circle {
    // etc
})();

這樣,頂層僅引用myClass ,而不引用weakMap

每當在構造函數中需要變量時,我就會在構造函數中使用let x不一定是為了隱藏數據,而是因為它在構造函數之外沒有用。 請參見為什么限制范圍是一種好的編程習慣?

請注意,目前有一個關於類字段的建議,該字段可能最終會實現,其中包括專用字段的語法,例如:

class Circle {
  constructor(radius) {
    this.#x = radius;
    // ...

這將允許從Circle內的任何位置訪問#x ,而無其他地方。 它在功能上等同於WeakMap實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM