Ich versuche, meinen Kopf um die Idee der Klassen, Daten Sichtbarkeit und Schließungen (speziell in Javascript) zu wickeln, und ich bin auf der jQuery docs Seite für Typen, es erwähnt, dass Schließungen verwendet werden, um Daten zu verbergen:
Das Muster ermöglicht es Ihnen, Objekte mit Methoden zu erstellen, die mit Daten arbeiten, die für Außenstehende nicht sichtbar sind - die eigentliche Grundlage 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
Indem die Variable counter mit dem Schlüsselwort var deklariert wird, ist sie bereits innerhalb der Funktions-/Klassendefinition lokal skaliert. Soweit ich weiß, ist sie von außen zunächst nicht zugänglich. Übersehe ich etwas aus Sicht der Datensichtbarkeit?
Zweitens: Gibt es einen Vorteil, die Klasse wie oben zu schreiben und nicht wie unten:
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 nicht vollständig aus dem ersten Beispiel zu schätzen weiß. Wenn ich richtig bin, erstellen beide Beispiele Schließungen in, dass sie Zugriff auf Daten außerhalb ihres eigenen Bereichs deklariert sind.