właściwości JavaScript może być non-przeliczalny, co oznacza, że nie pojawia się w for..in
pętli lub Object.keys
wyników.
Możesz użyć , aby uzyskać wszystkie właściwości (wyliczalne lub nieprzeliczalne) bezpośrednio na obiekcie. Mówię "bezpośrednio", ponieważ normalne wyliczenie wyszukuje prototypowy łańcuch obiektu, aby uzyskać właściwości przeliczalne na prototypach macierzystych, podczas gdy getOwnPropertyNames
nie.
Zatem Object.getOwnPropertyNames(err)
pokazuje tylko
['stack',
'arguments',
'type',
'message']
Obiekt name
jest non-przeliczalny własnością Error.prototype
i nigdy nie jest ustawiony bezpośrednio na przykład Error
. (Prototypowanie podsumowanie: przy próbie dostępu err.name
, odnośnika err
okazuje się nic, więc interpreter patrzy na Error.prototype
, który ma właściwość name
).
Spróbuj 'Object.getOwnPropertyNames()' zamiast 'Object.keys() '. Mogą być nieprzeliczalne. –
Jako przykład, 'Object.getOwnPropertyDescriptor (err, 'stack')' pokazuje 'wyliczalne: false'. – apsillers