2012-05-05 4 views
5

Ja, ich habe gesehen, dass das vorher gefragt und beantwortet wurde. Aber hier ist, was ich immer noch nicht verstehen:Noch ein "Wie finde ich den Namen der Klasse/des Konstruktors eines Javascript-Objekts"?

Wenn ich eine Konstruktorfunktion erstellen, und überschreiben Sie nicht die prototype Eigenschaft Funktion, dann haben wir die automatische constructor Eigenschaft hängt die prototype Eigenschaft der Funktion. Das ist MyConstructor.prototype.constructor === MyConstructor => wahr. Groß. Aber was passiert nun, wenn ich prototype mit meinem eigenen Objekt überschreibe und die Eigenschaft constructor nicht patched? constructor ist jetzt nicht auf vorhanden, und wenn referenziert wird nur die Prototyp-Kette gefunden, das ist MyConstructor.prototype.constructor === Object => wahr. Fein. So ...

Warum ist es in einem Javascript-Debugger (wie Chrome), wenn ich den Prototyp eines Konstruktors mit meinem eigenen Objekt überschreiben, und eine Instanz dieses Konstruktors neu auf, und geben Sie dann diese Instanzvariable auf den Befehl Linie, Chrome erzählt mir glücklich den Typ? Woher weiß es ??? I.e. Was kann ich tun, um dasselbe durch Code herauszufinden?

Einfache Repro:

> function Foo() {} 
undefined 
> Foo.prototype.constructor === Foo 
true 
> Foo.prototype = {} 
Object 
> Foo.prototype.constructor === Foo 
false 
> f = new Foo() 
Foo 
> f 
Foo 

Ist es pure Debugger Magie?

+0

Die Assoziation ist immer noch da - da 'f instanceof Foo'' true' zurückgibt - aber ich glaube nicht, dass sie dem Benutzercode ausgesetzt ist. Whcih ich denke, macht es rein Debugger Magie. –

+1

Dieser scheint verwandt zu sein g13n

+0

firefox scheint zu fehlen der Debugger Magie seit dem f = new Foo() und f Zeilen beide zurück [object Object], die die verknüpfte Antwort oben erklärt – nvuono

Antwort

0

Vielleicht ist die Lösung einfach zu nicht den Prototyp zu Ihrem benutzerdefinierten Objekt? Sie könnten alle Eigenschaften Ihres benutzerdefinierten Objekts durchlaufen und sie dem vorhandenen Prototyp als Eigenschaften hinzufügen, sodass alle Eigenschaften des ursprünglichen Prototypobjekts beibehalten werden, z. B. der Konstruktor.

+0

Das, oder fügen Sie Ihrem benutzerdefinierten Prototyp-Objekt eine Eigenschaft hinzu, die einen Verweis auf die Konstruktorfunktion enthält, oder einfach nur eine benutzerdefinierte Zeichenfolge oder etwas, das Sie überprüfen können ... – JKing

Verwandte Themen