He creado un Circle de clase. Aquí
_radius es un parámetro privado_areaCalculate es un método privado Después de calcular el valor del método privado _areaCalculate . Necesito este valor para el método público areaPrint . Pero me muestra undefined .
const _radius = new WeakMap() const _areaCalculate = new WeakMap() class Circle { constructor(r) { _radius.set(this, r) } [_areaCalculate]() { return (Math.PI * Math.pow(this.radius, 2)).toFixed(2) } areaPrint() { console.log("The area of Circle is: " + _areaCalculate.get(this)) } } let c = new Circle(4) c.areaPrint()Si uno se apega al enfoque del OP de utilizar un mapa débil para acceder a un "miembro privado" de una instancia de Circle a través de un método prototípico, entonces solo necesita simplificar el código a un solo mapa de referencia y una función que calcula el área de una instancia de círculo. sobre la marcha ...
function getComputedArea(circle) { return (Math.PI * Math.pow(rMap.get(circle), 2)).toFixed(2); } const rMap = new WeakMap(); class Circle { constructor(radius) { rMap.set(this, radius); } areaPrint() { console.log( `A radius ${ rMap.get(this) } circle area is ${ getComputedArea(this) }` ); } } let a = new Circle(4); let b = new Circle(9); a.areaPrint(); b.areaPrint();... o uno sigue el consejo de VLAZ y comienza a utilizar la sintaxis de declaración de campo privado para campos de instancia privada .
Editar
De la discusión basada en comentarios más abajo con Bergi ...
"Los métodos privados, a diferencia de los campos privados, se asignan en el prototipo, no en la instancia, al igual que sus respectivas contrapartes públicas" . – Bergi
... la implementación de getComputedArea cambió de una función auxiliar local a un método de instancia privada .
class Circle { #getComputedArea(radius) { return (Math.PI * Math.pow(this.#radius, 2)).toFixed(2); } #radius; constructor(radius) { this.#radius = radius; } areaPrint() { console.log( `A radius ${ this.#radius } circle area is ${ this.#getComputedArea() }` ); } } let a = new Circle(4); let b = new Circle(9); a.areaPrint(); b.areaPrint();