2015-10-05 28 views
5

Ich bin neugierig auf die Art, wie Node.js Objekte über console.log (Objekt) druckt.Node.js console.log (Objekt) druckt leeres Objekt

Ich habe den folgenden Code (von Learning Javascript Design-Buch Patterns) unter einer Datei constructor.js

var defineProp = function(obj, key, value){ 
    var config = { 
     value: value, 
     writable: true, 
     configurable: true 
    }; 
    Object.defineProperty(obj, key, config); 
} 

var person = Object.create(Object.prototype); 


defineProp(person, "car", "Delorean"); 
defineProp(person, "dateOfBirth", "1981"); 
defineProp(person, "hasBeard", false); 

console.log(person); //This prints {} in Node.js 

Rennen mit diesem Code mit >node constructor.js druckt ein leeres Objekt. Chrome druckt jedoch, was ich erwarten würde, wenn ich den Code in einer HTML-Datei ausführen würde.

console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false} 

Hinweis: Ich kann immer noch die Attribute (wie console.log(person.car)) unter Knoten drucken, nur nicht das Objekt selbst (wie console.log(person))

Warum ist das? Verwenden Chrome und Node separate Prototypen für das Konsolenobjekt, obwohl sie dieselbe JavaScript-Engine verwenden?

+4

Nicht sicher, warum sie unterschiedlich sind, aber wenn Sie dem 'config' Objekt' enenable: true' hinzufügen, werden die Eigenschaften in node.js gedruckt. – JohnnyHK

+0

Mögliches Duplikat von [View-Methoden von Node.js String.prototype?] (Http://stackoverflow.com/questions/12536510/view-methods-of-node-js-string-prototype) –

+2

Standardmäßig werden Eigenschaften erstellt mit 'defineProperty()' ist nicht aufzählbar. Vielleicht zeigt Ihnen node.js nur aufzählbare Eigenschaften und Chrome nicht aufzählbare Eigenschaften. 'console.log()' ist nicht etwas, das in einem Standard spezifiziert ist, und es ist ein Host-Objekt, kein offizieller Teil der Javascript-Sprache, so dass unterschiedliche Umgebungen unterschiedliche Verhaltensweisen haben können. – jfriend00

Antwort

Verwandte Themen