2013-10-06 17 views
5

Amo il metodo Object.getOwnPropertyNames. Sembra uno strumento così utile per conoscere gli oggetti all'interno di una shell JS.JavaScript "Object.getOwnPropertyNames" Proprietà mancanti?

Quello che mi sta facendo impazzire, però, è che getOwnPropertyNames sembra mancare alcuni (Nota: nei miei test sto eseguendo un'implementazione ECMA 5 - Google Chrome versione 28.0.1500.95).

Ecco un esempio:

> var x= [] 
undefined 
> x.constructor 
function Array() { [native code] } 
> Object.getOwnPropertyNames(x) 
["length"] 

Eppure chiaramente, x ha un sacco di proprietà! (Ad esempio https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype)

> x.push 
function push() { [native code] } 
> x.pop 
function pop() { [native code] } 

Qualcuno può aiutare a spiegare cosa sta succedendo qui? Grazie! : D

Edit: Va bene! Vedo che getOwnPropertyNames ottiene solo i nomi delle proprietà dell'oggetto a portata di mano. C'è un modo semplice per ottenere proprietà ereditate? O forse l'unico modo è attraversare object.constructor.prototype .__ proto__?

+0

getOWNpropertyNames –

+0

La domanda modificato diventa un possibile duplicato di [Come elencare le proprietà di un oggetto JavaScript] (http://stackoverflow.com/questions/208016/how-to-list -le-properties-di-un-javascript-oggetto) – Djizeus

risposta

4

Secondo https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

La proprietà __proto__ è deprecato e non deve essere utilizzato. È necessario utilizzare Object.getPrototypeOf anziché il getter __proto__ per determinare [[Prototipo]] di un oggetto.

> x = []; 
[] 
> Object.getOwnPropertyNames(Object.getPrototypeOf(x)); 
["length", "constructor", "toString", "toLocaleString", "join", "pop", "push", "concat", 
"reverse", "shift", "unshift", "slice", "splice", "sort", "filter", "forEach", "some", 
"every", "map", "indexOf", "lastIndexOf", "reduce", "reduceRight"] 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf

Problemi correlati