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