Ich versuche, einen generischen Weg zu finden, den Namen von Konstruktoren zu bekommen. Mein Ziel ist es, ein Convention-over-Framework für KnockoutJS zu erstellen
Meine Idee ist, über alle Objekte im Fenster zu iterieren, und wenn ich den Konstruktor finde, nach dem ich suche, kann ich den Index verwenden, um den Namen des Konstruktors zu erhalten
Der Code sofar
%Vor% Das Problem ist, dass ich eine Permission denied to access property 'toString'
Exception bekomme, und ich kann nicht einmal versuchen, catch, also sehen, welches Objekt das Problem verursacht
Geige Ссылка
Endgültige Version in dieser Geige Ссылка
Hier nach dem Embryo meines Convention over configuration plugins suchen Ссылка
Dies löst alles außer einer Sache: var MyApp = {};
nicht fügt es zu window-object
hinzu. Wenn Sie dies in window.MyApp = {};
ändern, funktioniert es (auch innerhalb eines IFrames) vollständig.
Zum Hinzufügen des Arrays durch Festlegen des Schlüsselnamens muss der Schlüsselname eine Zeichenfolge sein, damit Javascript automatisch aufgerufen wird. toString()
für den vorgeschlagenen Schlüsselnamen, der bei bestimmten Objekten fehlschlägt. Verwenden Sie stattdessen .push (), um Elemente eines beliebigen Typs zu einem Array hinzuzufügen und dann .indexOf()
, um zu prüfen, ob es bereits existiert.
Beachten Sie, dass jsFiddle immer noch unterbrochen wird, weil er in einem iframe
platziert wurde. Öffnen Sie in einem neuen Tab , um das zu lösen.
Meine vorherige Antwort (die sich als ungültig erwies, als ich versuchte, sie in Ihrem jsFiddle zu überprüfen):
Sie müssen überprüfen, ob der Konstruktor ein exaktes Objekt ist. Wenn es dann .toString () aufruft, wird es eine Sicherheitsausnahme verursachen, die ich etwas schwer zu debuggen fand. Hier ist eine Funktion, die ich verwende, um den Typ eines Objekts in einem Var-Dumper zu erhalten, den ich benutze.
%Vor%Tags und Links javascript