¿Es posible clonar idiomáticamente una instancia de clase javascript desde dentro de su propio método? Otros lenguajes como Java me permiten sobrescribir/clonar la instancia actual mediante una sobrecarga de construcción o this sobrescritura. A Javascript no parece gustarle y arroja el error SyntaxError: Invalid left-hand side in assignment . A continuación se muestra un ejemplo de esta explicación detallada.
class Car { constructor(name, year) { this.name = name; this.year = year; } renew() { this = new Car('Ferrari', 2021); return this } } car = new Car('Ford', 206) car.renew()this no se puede asignar a. Para lo que quieres, debes:
class Car { constructor(name, year) { this.name = name; this.year = year; } renew() { return new Car('Ferrari', 2021); } } let car = new Car('Ford', 206) car = car.renew() console.log(car.year); class Car { constructor(name, year) { this.name = name; this.year = year; } renew() { Object.assign(this, new Car('Ferrari', 2021)); } } let car = new Car('Ford', 206) car.renew() console.log(car.year);No, no es posible hacer esto. this es inmutable. Sus opciones serían modificar las propiedades de la clase o crear una nueva instancia de clase y asignarla a su variable en el ámbito adjunto.
Tampoco estoy seguro de qué idioma está utilizando que permite la asignación a this referencia. No es posible enJava , C#, Scala o Ruby. Es técnicamente posible en Python, pero no tiene la semántica que describe (por ejemplo, no muta el objeto). Ni siquiera puedes hacerlo en C++ .