Quanto tempo occorre per la compatibilità con il browser? Tutti i browser moderni dovrebbero supportare Object.getOwnPropertyNames()
. Utilizzando il tuo esempio, Object.getOwnPropertyNames([])
restituirà ["length"]
.
Maggiori informazioni qui: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
Modifica: Altri esempi:
Object.getOwnPropertyNames([1, 2, 3]);
restituisce ["0", "1", "2", "length"]
Object.getOwnPropertyNames(String);
rendimenti ["prototype", "quote", "substring", "toLowerCase", "toUpperCase", "charAt", "charCodeAt", "contains", "indexOf", "lastIndexOf", "startsWith", "endsWith", "trim", "trimLeft", "trimRight", "toLocaleLowerCase", "toLocaleUpperCase", "localeCompare", "match", "search", "replace", "split", "substr", "concat", "slice", "fromCharCode", "length", "name", "arguments", "caller"]
Modifica n. 2: Ok, visto che stai cercando un elenco completo di proprietà e metodi, inclusi quelli ereditati, ho preso in prestito da altre due domande SO (collegate sotto) e ho trovato una soluzione che appare per ottenere ancora di più:
var findProperties = function(obj) {
var aPropertiesAndMethods = [];
do {
aPropertiesAndMethods = aPropertiesAndMethods.concat(Object.getOwnPropertyNames(obj));
} while (obj = Object.getPrototypeOf(obj));
for (var a = 0; a < aPropertiesAndMethods.length; ++a) {
for (var b = a + 1; b < aPropertiesAndMethods.length; ++b) {
if (aPropertiesAndMethods[a] === aPropertiesAndMethods[b]) {
aPropertiesAndMethods.splice(a--, 1);
}
}
}
return aPropertiesAndMethods;
}
Quindi, se si usa chiamare findProperties([])
, restituisce ["length", "join", "reverse", "sort", "push", "pop", "shift", "unshift", "splice", "concat", "slice", "lastIndexOf", "indexOf", "forEach", "map", "reduce", "reduceRight", "filter", "some", "every", "iterator", "constructor", "toSource", "toString", "toLocaleString", "valueOf", "watch", "unwatch", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__"]
questioni legate
javascript inheritance, reflection and prototype chain walking?
How to merge two arrays in Javascript and de-duplicate items
È possibile utilizzare il completamento automatico nella REPL FYI e funziona abbastanza bene per vedere la maggior parte delle cose, ma una risposta completa alla tua domanda è piuttosto complicato. Principalmente si può ottenere ciò che si vuole, ma richiede un sacco di trucchi abbastanza grande. 'util.inspect' e' console.log' nel nodo sono anche pratici, e ho scritto la mia implementazione 'util.inspect' in un punto che posterò una volta che la trovo se una risposta non è stata accettata per allora. –