Ich versuche, meinen Kopf rund um die Idee der Klassen, Datensichtbarkeit und Schließungen (speziell in Javascript) und ich bin auf der jQuery-Dokumentseite für Typen, es erwähnt, dass Verschlüsse zum Ausblenden von Daten verwendet werden :Javascript Closure und Datensichtbarkeit
Das Muster ermöglicht es Ihnen, Objekte mit Methoden zu erstellen, die mit Daten arbeiten, die nach außen nicht sichtbar sind - die Basis der objektorientierten Programmierung.
das Beispiel:
function create() {
var counter = 0;
return {
increment: function() {
counter++;
},
print: function() {
console.log(counter);
}
}
}
var c = create();
c.increment();
c.print(); // 1
durch den variablen Zähler mit dem Schlüsselwort var erklärt, ist es bereits vor Ort innerhalb der Funktion/Klassendefinition scoped. Soweit ich weiß und sagen kann, ist es von außen nicht zugänglich. Fehle ich etwas aus Sicht der Datensichtbarkeit?
Zweitens ist es ein Vorteil, dass die Klasse wie oben zu schreiben im Vergleich wie folgt:
function create() {
var counter = 0;
this.increment = function() {
counter++;
}
this.print = function() {
console.log(counter);
}
return this;
}
var c = create();
c.increment();
c.print(); // 1
Wie ich es verstehe, sind diese mehr oder weniger semantisch die gleiche Sache - die erste ist nur mehr „jQuery Stil ". Ich frage mich nur, ob es einen Vorteil oder eine andere Nuance gibt, die ich aus dem ersten Beispiel nicht ganz verstehe. Wenn ich richtig liege, erzeugen beide Beispiele Schließungen, indem sie auf Daten zugreifen, die außerhalb ihres eigenen Bereichs deklariert wurden.
http://docs.jquery.com/Types#Closures
Und persönlich, das ist die Art, wie ich es vorziehe, Objekte zu erschaffen, nachdem ich unzählige Techniken ausprobiert habe. Ich denke, das ist so viel sauberer und einfacher zu verstehen. Aber das bin ich. :) –
Minor nit: die Rückgabe von "this" ist gleichbedeutend damit, dass bei der Verwendung des neuen Operators überhaupt nichts zurückgegeben wird. Ohne den neuen Operator ist "this" der aktuelle Kontext (oft mal global), und das führt dazu, dass Sie globale Variablen überlisten. – ken