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?
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. –
Dieser scheint verwandt zu sein –
g13n
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