Javascript-从自己的方法重新分配类实例



是否可以从自己的方法中惯用地克隆javascript类实例?Java等其他语言允许我通过构造重载或this覆盖来覆盖/克隆当前实例。Javascript似乎不喜欢它,并抛出错误SyntaxError: Invalid left-hand side in assignment。下面是一个详细解释的例子。

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不能分配给。对于您想要的,您必须:

  • 从方法返回一个新实例,并在方法外部重新分配它

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);

不,这是不可能的。this是不可变的。您可以选择修改类的属性,或者创建一个新的类实例并将其分配给封闭范围中的变量。

我也不确定你使用的是什么语言,可以分配给this参考。这在Java、C#、Scala或Ruby中是不可能的。从技术上讲,它在Python中是可能的,但没有您描述的语义(例如,它不会改变对象(。你甚至不能在C++中做到这一点。

最新更新