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