Si è verificato un problema durante il tentativo di sfruttare Object.defineProperty()
su un oggetto di base. Voglio ereditare le proprietà da quell'oggetto, usando Object.create()
e quindi definire più proprietà nell'oggetto derivato (che può essere ereditato da lì). Devo notare che sto pensando a questo su node.js.Perché console.log() non mostra proprietà ereditate da Object.create?
Ecco un esempio:
var Base = {};
Object.defineProperty(Base, 'prop1', {
enumerable:true,
get:function(){ return 'prop1 value';}
});
Object.defineProperty(Base, 'prop2', {
enumerable:true,
value : 'prop 2 value'
});
Object.defineProperty(Base, 'create', {
value:function(){
return Object.create(Base);
}
});
console.log(Base);
var derived = Base.create();
Object.defineProperty(derived, 'prop3', {
enumerable:true,
value:'prop 3 value'
});
console.log(derived);
che emette il seguente:
{ prop1: [Getter], prop2: 'prop 2 value' }
{ prop3: 'prop 3 value' }
ho pensato che console.log() sarebbe enumerare le proprietà ereditate, così come la proprietà prop3
che ho definito sull'oggetto derivato. Sembrerebbe che non cerchi la gerarchia del prototipo per le proprietà definite in questo modo. È corretto?
Ho cercato di ignorare il metodo toString()
per il mio oggetto, ma sembra che console.log() non lo chiami.
- Come posso ottenere tutte le proprietà registrate senza dover eseguire l'enumerazione?
- È un modo valido per implementare l'ereditarietà?
EDIT:
- C'è un'altra funzione nelle librerie Node.JS' che avrebbe fatto il lavoro e registrare le proprietà ereditate?
Per i più pigri: http://jsfiddle.net/ aDrjA/1/ –
Per i principianti, l'implementazione di 'console' è specifica per il browser. Non puoi davvero fare affidamento su di esso per comportarti allo stesso modo, browser per browser, poiché ogni fornitore sta facendo qualcosa di completamente diverso con il non standard. Quando si 'console.log (oggetto);' in Chrome-tools, si ottiene un albero-nodo espandibile, che ha tutti i metodi e le proprietà di proprietà, e ha anche la catena 'proto', che ha lo stack di ereditarietà completo ... Aspettarsi questo in ogni browser non accadrà - i programmi in alcuni browser (WP7 IE9) si arresteranno in modo anomalo se vedranno anche 'window.console', poiché non hanno nemmeno implementazioni. – Norguard
*** "Devo notare che sto pensando a questo su node.js." *** –