odpowiedź brzmi: nie. Nie można wyliczyć właściwości, które nie są przeliczalne. Istnieją jednak co najmniej dwa sposoby obejścia tego problemu.
Pierwszym z nich jest wygenerowanie wszystkich możliwych kombinacji znaków, które będą używane jako nazwy właściwości testowych (pomyśl: a, b, c, ... aa, ab, ac, ad, ...). Biorąc pod uwagę, że społeczność standardów słynie z wymyślania naprawdę długich nazw metod (getElementsByTagNames, propertyIsEnumerable), ta metoda wymaga trochę cierpliwości. :-)
Innym podejściem jest przetestowanie znanych właściwości natywnych z pewnej predefiniowanej listy.
Na przykład: Dla array
by przetestować dla wszystkich znanych rodzimych właściwości Function.prototype
:
prototype caller constructor length name apply call toSource toString valueOf toLocaleString
... i rzeczy odziedziczonych Object.prototype
:
__defineGetter__ __defineSetter__ hasOwnProperty isPrototypeOf __lookupGetter__
__lookupSetter__ __noSuchMethod__ propertyIsEnumerable unwatch watch
... i rzeczy odziedziczonych od Array
:
index input pop push reverse shift sort splice unshift concat join slice indexOf lastIndexOf
filter forEach every map some reduce reduceRight
..i wreszcie, i ewentualnie, każda nieruchomość przeliczalny obiektu testujesz:
for (var property in myArrayObject) myPossibleProperties.push(property);
Będziesz wtedy mógł przetestować każdy z tych, aby sprawdzić, czy są one obecne na instancji obiektu.
To nie ujawni nieznanych członków, których nie można wyliczyć (nieudokumentowanych lub ustawionych przez inne skrypty), ale pozwoli ci wyświetlić listę właściwości natywnych.
Znalazłem informacje o natywnych właściwościach Array
na Mozilla Developer Center i MSDN.
mógłbyś stringify swój obiekt do JSON i analizować wynik? – starbeamrainbowlabs