var peso, potencia, marca
peso = peso
potencia = potencia
marca = marca
Esto no hace nada. La declaración inicial no crea nuevas variables. Tendrían que llamarse de manera diferente. Pero la idea es correcta solo que el ejercicio pide setters y getters.
También puede referirse a usar solo atributos privados por convención anteponiéndoles el subguión, pero esto es solo por convención y no son realmente privados, yo me inclinaría más por esto para darle más sentido a todo el enunciado:
class Coche {
constructor(peso, potencia, marca) {
this._peso = peso
this._potencia = potencia
this._marca = marca
}
set peso(peso) {
this._peso = peso
}
get peso() {
return this._peso
}
}
Pero ahí las propiedades no son privadas realmente.
Puedes tener una mezcla de los dos:
class Coche {
constructor(peso, potencia, marca){
Object.defineProperty(this, 'peso', {
get() { return peso; },
set(pesoNuevo) { peso = pesoNuevo }
});
// lo mismo para las otras dos propiedades
}
}
Por último, javascript si que tiene manera de encapsular código de manera privada por encima de sus entornos léxicos, es una propuesta que lleva unos 5 años ya y apenas se publica en la especificación (este año). Pero los navegadores modernos ya entienden esta nueva adición.
class Coche {
#peso; #potencia; #marca;
constructor(peso, potencia, marca){
this.#peso = peso;
this.#potencia = potencia;
this.#marca = marca;
}
get peso(){
return this.#peso;
}
set peso(peso){
this.#peso = peso;
}
/* y así para el resto de las otras propiedades */
}