2012-10-17 7 views
10

Ich benutze Chrome v22.0.1229.94 m, nicht, dass es wichtig sein sollte, aber nur für den Fall :-)Wie bestimmt DevTools den Namen eines Konstruktors eines Objekts?

Portabilität ist mir egal. Solange es mit Chrome (und Safari) funktioniert, bin ich glücklich.

Ich habe zwei Funktionen, foo und bar:

var foo = function() { 
    ... 
} 
function bar() { 
    ... 
} 

dann, wenn ich Objekte erstellen mit ihnen:

f1 = new foo(); 
b1 = new bar(); 

Ich kann den Konstruktor der Name für Bar, aber noch für foo:

> f1.constructor.name ==> "" 
> b1.constructor.name ==> "bar" 

In beiden Fällen zeigt die DevTools-Konsole die Namen "foo" und "b ar "wenn ich die Variablen f1 und b1 prüfe.

Wie extrahieren ich den Namefoo für f1 als DevTools in der Lage ist?

enter image description here

+0

Das ist interessant. Es ist wie Devtools die anonyme Funktion willkürlich nennen. Schau dir das auch an: 'var foo = function myfoo() {}; neues foo(); ==> myfoo' – Mohsen

+0

@Mohsen danke für den Bildschirm greifen und Ihre unterstützende Kommentar. – CyberFonic

+0

Das ist eine tolle Frage, und ich kann nicht glauben, dass es nicht möglich ist, diesen Namen von der Funktion selbst zu bekommen ... Ich brauche es: D Irgendwas Glück, eine Lösung zu finden ?? – Wilt

Antwort

1

Im Fall für foo, sich erstellen Sie einen Funktion Ausdruck. Das bedeutet, dass Sie einer Variablen eine anonyme Funktion zuweisen.

Sie können die Funktion name nicht programmatisch so lösen, es sei denn, Sie geben der Funktion einen Namen und erstellen eine "benannte Funktion Ausdruck".

var foo = function foo() { 
    ... 
} 
+1

Seine Frage ist, wie Developer Tools ein Objekt namens 'foo' als Antwort auf' new foo() '? – Mohsen

6

V8 kann die Funktionsnamen-Inferenz während der Analysephase ausführen und diese Informationen über seine APIs verfügbar machen. Sie können diese Informationen nicht mit den normalen Objekteigenschaften extrahieren.

+1

Ich bin nicht negativ gegenüber der Verwendung von V8 API (brauchen keine Portabilität). Können Sie mich in die Richtung der API-Dokumentation weisen? – CyberFonic

+1

Ist es wirklich nicht möglich, diesen Namen zu bekommen? Nicht zu fassen... – Wilt