Ich möchte JSON.stringify
alle Eigenschaften eines Objekts, einschließlich derjenigen über Getter definiert. Allerdings, wenn ich JSON.stringify
auf ein Objekt aufrufen, Eigenschaften über Getter definiert sind weggelassen:Siehe alle Schlüssel eines JS-Objekts, auch die von Getter
> const obj = {key: 'val'}
undefined
> JSON.stringify(obj)
'{"key":"val"}'
> Object.defineProperty(obj, 'getter', {get:() => 'from getter'})
{ key: 'val' }
> obj.getter
'from getter'
> JSON.stringify(obj)
'{"key":"val"}'
Ich hatte gehofft, um zu sehen:
> JSON.stringify(obj)
'{"key":"val", "getter": "from getter"}'
Ist das möglich? Object.keys
erkennt nicht die Getter entweder:
> Object.keys(obj)
[ 'key' ]
Können Sie für Getter Schlüssel abfragen? Oder müssen Sie ihre Namen im Voraus wissen?
Die Tatsache, dass es ein Getter ist, ist irrelevant; Das Problem ist, dass es nicht aufzählbar ist. ('Object.defineProperty' verwendet einen Standard' enumerable: false'.) Sie möchten nicht aufzählbare Eigenschaften aufzählen (was möglich ist, aber das ist die Beschreibung Ihres Problems). – apsillers
vielleicht die Eigenschaft aufzählbar machen? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Enumerable_attribute – ray
@apsillers: Machen Sie eine Antwort :) –