Ich versuche, die Regeln zum Generieren von Klassennamen in Javascript zu bestimmen. Ich klebte dieses Skript in Chrome Entwickler-Tools-Konsole:Wie werden JavaScript-Klassennamen für benutzerdefinierte Klassen in Chrome Dev Tools berechnet?
var obj = {
Constr : function() { }
};
var obj2 = obj;
console.log(new obj.Constr());
console.log(new obj2.Constr());
obj2.Constr2 = function() { };
console.log(new obj.Constr2());
console.log(new obj2.Constr2());
Und hier sind die Ergebnisse in der Konsole:
obj.Constr
obj.Constr
obj2.Constr2
obj2.Constr2
Es scheint, dass der Name der Klasse durch die Variable bestimmt wird, dass die Konstruktor-Funktion wurde ursprünglich zugewiesen. Ich suche nach den genauen Regeln, die CDT verwendet, um diesen Namen zu generieren. Ist dies derselbe Name, den der Google Closure Compiler erkennt?
Ich habe versucht zu sehen, ob ich ähnliches Verhalten in Firebug reproduzieren kann, aber ich kann nicht scheinen, Klassennamen zum Ausdrucken in der Konsole. Als eine zweite Frage, weiß jemand, wie man das in Firebug sieht?
Also, wie ich befürchtet habe, kommt der Name, der von CDT ausgedruckt wird, nicht von den ecmascript-Spezifikationen. Es ist nur eine Debugging-Bequemlichkeit für den Entwickler. Ich bin ziemlich neu in Javascript und ich mag generell Prototyp-Stil, aber ich finde es enttäuschend, dass Bibliotheken wie Dojo und Extjs versuchen, in OO Stil der Programmierung schuhern. Ich denke, dass dies eine der besseren Eigenschaften von Javascript verwirrt. –
Javascript ist eine _very_ OO-Sprache, und ist tatsächlich ziemlich flexibel darin. Es gibt viele Bibliotheken, die ein typisches klassenbasiertes OO-on-top von Javascript erstellen, und das funktioniert normalerweise ziemlich gut. Dies ist nicht unbedingt eine schlechte Sache für diese Bibliotheken oder Javascript selbst. – lanzz