No estoy seguro de haber formulado la pregunta con mucha claridad, aunque esencialmente tengo dos clases en este código de ejemplo, una clase 'Car' y una clase 'CustomCar'.
Estoy experimentando con WeakMaps para miembros de clases privadas y quiero modificar uno de estos valores de WeakMap en una clase extendida, mi código es el que se muestra:
const privateProperties = new WeakMap(); // Car Class class Car { constructor(colour, seats) { privateProperties.set(this, { colour: colour, seats: seats, type: 'Car', }); } get colour() { return privateProperties.get(this).colour; } start() { console.log( `Started the ${privateProperties.get(this).colour} ${ privateProperties.get(this).type } with ${privateProperties.get(this).seats} seats!\n` ); } } // Custom Car Class class CustomCar extends Car { constructor(colour, seats, type = 'Custom Car') { super(); privateProperties.set(this, { colour: colour, seats: seats, type: type, }); } } module.exports.Car = Car; module.exports.CustomCar = CustomCar;Quería cambiar el valor asociado con la tecla 'tipo' en la clase CustomCar a cualquier valor ingresado como parámetro, es decir:
let myCar = new CustomCar('blue', 5, 'Polo');En el código anterior, el valor 'tipo' se establecería en 'Polo'.
Sin embargo, la única forma en que he podido hacer esto hasta ahora es mediante la duplicación del código de la clase principal:
privateProperties.set(this, { colour: colour, seats: seats, type: type, });Parece que no puedo establecer el valor de tipo en WeakMap de otra manera, ¿este código es correcto en términos de mejores prácticas?
No es necesario que asigne todo el elemento privateProperties , simplemente reemplace la propiedad de type .
class CustomCar extends Car { constructor(colour, seats, type = 'Custom Car') { super(colour, seats); privateProperties.get(this).type = type; } }