簡體   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