JavaScript ES6中类的WeakMap和private成员之间有什么区别吗?

JavaScript ES6中类的WeakMap和private成员之间有什么区别吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图找出在类中定义本地/私有属性和方法与WeakMap构造函数之间的区别 把它们藏在外面的目的是一样的,还是有其他东西可以使用它们 鉴于您当前的实施: 您的let x不是很有用,因为它只能在构造函数中引用。它不能用于任何原型方法中。另一方面,WeakMap可以在任何地方引用。这是一个相当大的区别 您的WeakMap可以在任何地方引用。这意味着它实际上没有提供任何隐私;任何引用实例和WeakMap的内容都可以访问您希望私有的radius值 如果希望WeakMap通过闭包正确私有,可以使用II

我试图找出在类中定义本地/私有属性和方法与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;
    // ...

这将允许从
圆圈
内的任何位置访问
#x
,而不是从其他地方。它在功能上等同于
WeakMap
实现。

如果可以,请将实际代码作为文本编辑到您的问题中-只需使用和调试代码图像即可。它迫使那些本来想帮助你的人首先去做,这是浪费时间。我只想知道有什么区别?es6 afaict中没有私人会员
x
是一个局部变量。就像在任何函数中一样。@Jonaswillms,不是吗?同样,请将代码添加为文本。