我面临以下挑战,即我没有成功。我找不到一个碰到相同问题的人的例子。
class MyClass {
name = 'default name'
}
let instance = new MyClass();
instance.name = 'new name';
# At this point I want to be able to access the default 'name' of my class (value: 'default name')
我很好奇如何做到最好。
答案 0 :(得分:3)
如其他答案所述,没有简单的方法,您必须创建一个新实例。
但是,如果您更经常需要此实例,则可以创建一次实例并重新使用它:
class MyClass {
name = 'default name'
}
MyClass.prototype.defaults = Object.freeze(new MyClass())
// ------------
let instance = new MyClass()
instance.name = 'new name'
console.log(instance.name) // new name
console.log(instance.defaults.name) // default name
我还使用Object.freeze
来防止对默认实例的意外修改。
您还可以分配给MyClass.defaults
,但是随后您必须使用instance.constructor.defaults.name
或MyClass.defaults.name
。
答案 1 :(得分:2)
给出问题恰好中的代码,除非创建新实例,否则不可能。与
name = 'default name'
您分配给实例对象的name
属性。然后用
instance.name = 'new name';
您覆盖了实例对象的name
属性。 'default name'
不再存在于原型链的任何地方。
因此,创建一个新实例以再次运行class字段:
class MyClass {
name = 'default name'
}
let instance = new MyClass();
instance.name = 'new name';
const newInstance = new MyClass();
console.log(newInstance.name);
更好的模式是将默认值放在 prototype 上。这样,您可以检查原型上的属性或实例上的属性:
class MyClass {
}
MyClass.prototype.name = 'default name';
let instance = new MyClass();
instance.name = 'new name';
console.log(instance.name);
console.log(MyClass.prototype.name);
答案 2 :(得分:1)
您可以创建一个新的临时实例并获取名称
class MyClass {
name = 'default name'
}
let instance = new MyClass();
instance.name = 'new name';
console.log((new MyClass()).name)