[英]How to access a default class property from an object?
我有以下挑战,我没有成功。 而且我找不到遇到同样问题的人的例子。
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')
我很好奇如何最好地解决这个问题。
鉴于正是问题的代码,它,除非你创建一个新的实例是不可能的。 和
name = 'default name'
您分配给实例对象的name
属性。 然后用
instance.name = 'new name';
您覆盖了实例对象的name
属性。 'default name'
不再存在于原型链中的任何位置。
因此,创建一个新实例以再次运行类字段:
class MyClass { name = 'default name' } let instance = new MyClass(); instance.name = 'new name'; const newInstance = new MyClass(); console.log(newInstance.name);
更好的模式是将默认值放在原型上。 这样,您可以检查原型上的属性或实例上的属性:
class MyClass { } MyClass.prototype.name = 'default name'; let instance = new MyClass(); instance.name = 'new name'; console.log(instance.name); console.log(MyClass.prototype.name);
正如其他答案所提到的,没有直接的方法,您必须创建一个新实例。
但是,如果您更频繁地需要它,您可以创建一次实例并重用它:
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
。
您可以创建一个新的临时实例并获取名称
class MyClass { name = 'default name' } let instance = new MyClass(); instance.name = 'new name'; console.log((new MyClass()).name)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.