我试图找出与WeakMap构造函数相比,在类中定义本地/私有属性和方法之间的区别是什么?
将它们从外面隐藏的目的是相同的还是使用其他东西?
答案 0 :(得分:1)
鉴于您当前的实施方式:
let x
并不是很有用,因为只能在构造函数中引用它。不能在任何原型方法中使用。另一方面,WeakMap可以在任何地方引用。这是一个很大的差异。radius
值。如果希望WeakMap通过闭包适当地私有,则可以使用IIFE定义类,例如:
const myClass = (() => {
const weakMap = new WeakMap();
return class Circle {
// etc
})();
这样,顶层仅引用myClass
,而不引用weakMap
。
只要在构造函数中仅需要变量 ,我就会在构造函数中使用您的let x
-不一定是隐藏数据的 s ,而只是因为它在构造函数之外没有用。参见Why is it good programming practice to limit scope?
请注意,目前class fields的提案可能会最终实施,其中包括专用字段的语法,例如:
class Circle {
constructor(radius) {
this.#x = radius;
// ...
这将允许从#x
内的任何地方访问Circle
,但无其他地方。它在功能上等效于WeakMap
实现。