2012-10-04 7 views
5

Ich cam auf diesen Code in einem Beispiel für die EaselJS-Bibliothek - was es tut ist es weist den Namespace der gesamten createjs-Bibliothek zu "Fenster".Javascript-Namespace auf Fenster setzen: Schlechte Idee? Oder Brilliant?

<script> 
var createjs = window; 
</script> 

Meine Frage ist: eine wirklich dumme Idee, den Namensraum einer Bibliothek Fenster Einstellung? Wird der ganze Zweck der Verwendung eines Namespace nicht einfach dadurch beseitigt, dass alle Namespace-Variablen plötzlich global definiert werden?

Der einzige Vorteil, den ich sehen kann, ist, dass Sie kürzere Konstruktoren für Ihre Objekte schreiben können. Zum Beispiel Eingabe:

stage = new Stage(canvas); 

statt:

stage = new createjs.Stage(canvas); 

Ist dies eine schlechte Idee, oder ist irgendwie brillant, oder einfach nur harmlos schrullig?

+0

Es könnte Ihnen erlauben, den Umfang von createjs zu ändern. Ich habe es nie wirklich so gesehen. – Blender

+0

Wie sonst werden Sie es entlarven, wenn es nicht global ist? –

+0

@ user1689607 - es ist ein Namespace. Mein Verständnis ist, dass Sie es nicht als globales Objekt entlarven wollen. Deshalb existiert es. Um die Änderung einer Variablenbenennungskollision zu reduzieren. Aber ich bin mir nicht sicher: Daher die Frage. –

Antwort

2

Eine gute Idee für mich ist etwas, das von vielen Menschen aktiv genutzt werden sollte. Und genau deshalb halte ich diesen Trick für eine schlechte Idee: Kurz gesagt, er besiegt die Idee der Namespaces: Wenn viele Leute (= Autoren anderer populärer JS-Bibliotheken) anfangen, window als ihren Namespace-Stamm zu verwenden, überschreiben Methoden Methoden Das Überschreiben anderer Methoden wird alle möglichen Vorteile eines solchen Ansatzes zunichte machen.

+0

Ich würde gerne mehr Details zu dieser Antwort wissen, aber ich werde es akzeptieren, da es die Frage zu beantworten scheint und keine gegenteiligen Meinungen aufgetaucht sind. Zusammenfassung: Es ist eine schlechte Idee. Vielen Dank. –

5

Der Grund, warum dies auf diese Weise eingerichtet wurde, war die Abwärtskompatibilität mit früheren Versionen, die nicht mit Namespaces gekennzeichnet waren. Dadurch können Entwickler beim Hinzufügen auf die neueste Version aktualisieren, ohne ihren gesamten Code neu zu gestalten.

1

Eigentlich kommt es darauf an. Wenn Sie mehrere JS-Bibliotheken verwenden, vermeiden Sie möglicherweise Namespace to Window, um alle Bibliotheken zu unterhalten.

Wenn Sie jedoch eine einzelne Bibliothek (CreateJS) für Ihr Spiel/Ihre Anwendung verwenden, können Sie Namespace mit Window verwenden, um viel Zeit zu sparen, die immer wieder in Ihren benutzerdefinierten Namespace-Namen geschrieben wird. Ich finde es eine praktische Möglichkeit, Spiele mit CreateJS zu erstellen.