繁体   English   中英

如何从对象访问默认类属性?

[英]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.nameMyClass.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM