2012-12-19 5 views
11

Also, wenn Sie an dieser Geige schauen http://jsfiddle.net/r0k3t/z8f2N/1/ können Sie dasWarum ist Object.prototype === zu myNewObj.prototype nicht?

var me = { fName: "ken", lName: "n" }; 

console.log(Object.prototype === Object.getPrototypeOf(me)); 

true zurück sehen. Warum nicht

console.log(Object.prototype === me.prototype); 

Da ich das „ich“ Objekt als Objektliteral sicher genug erstellt ist es Prototyp Object.prototype sein sollte, und die erste Zeile scheint, dass zu bestätigen.

Antwort

18
Object.prototype === me.constructor.prototype; // true 

Ich lasse Sie jetzt erraten, wie getPrototypeOf Werke :-)

Auch die Nicht-Standard-nicht-aber-Werke-fast-überall-Lösung (dank JANDY):

Object.prototype === me.__proto__; // true 
+5

+1 - eine großartige Ergänzung zu Ihrer Antwort wäre: 'console.log (Object.prototype === me .__ proto __);' * (das wird von ES6 standardisiert * – jAndy

+0

Oh Darnit! Das wusste ich auch (gut gesehen es Ich wünschte, ich könnte alles beim ersten Mal aufnehmen und mich an alles erinnern – Kenn

+0

Moment mal - warum sagt Yehuda Katz in sein Blog (http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/) unter dem Abschnitt "Object Literals" - "Objektliterale setzen den Prototyp des neu erstellten Objekts immer auf ein Objekt, das sich bei Object befindet .prototype ", dann schau dir das Bild an. Kannst du mir die Schuld geben, dass ich verwirrt bin? Yesh! – Kenn