Dies ist mein modifiziertes Beispiel basierend auf one by Rob Dodson.Wie funktioniert das JavaScript-Singleton-Muster mit zwischengespeicherten statischen Eigenschaften?
function User() {
// do we have an existing instance?
if (User.instance) {
return User.instance;
}
// proceed as normal
this.firstName = 'John';
this.lastName = 'Doe';
// cache
User.instance = this;
// implicit return
// return this;
}
a = new User();
b = new User();
b.firstName = "Paul"
console.log(a)
Ich lerne gerade, so kann ich Terminologie legen, aber wenn ich richtig verstehe, User.instance = this;
Klone User
, und dass Klon wird der einzige User
wir Zugang zu mehr haben. So ist der vollständige Prozess durch geht, ist wie folgt:
a = new User();
tun wir haben eine bestehende User.instance
? Nein, also fahre fort mit dem Code und setze a.firstName
auf John und a.lastName
auf Doe. Und nun erstellen Sie eine Kopie des this
Objekts mit dem Namen John Doe und legen Sie es als permanenten Teil des User
Konstruktors fest. Was macht es dauerhaft? Weil der Code niemals die Zeile erreichen wird, die er wieder einstellt. Warum? Weil ...
b = new User();
haben wir eine bestehende User.instance
? Ja. So return
die User.instance
haben wir bereits gespeichert, und bewegen sich wieder aus der Funktion.
Wie bezieht sich a
auf User.instance
? - Ich sehe nicht, wie die implizite Rückkehr von this
ist, was zu a
zurückkehrt - wo mit b
ist es der Klon.
Funktionen können auch Eigenschaften haben, so dass das Setzen von 'User.instance = this;' das zuerst erzeugte Unvermögen auf die Funktion selbst speichert. Wenn es erneut aufgerufen wird, erkennt es seine Instanzeigenschaft und gibt die zwischengespeicherte Instanz zurück. Und b ist kein Klon, es ist eine Referenz auf das gleiche Objekt, auf das Bezug genommen wird. Wenn Sie also b.firstName in paul ändern, ist a.firstName auch paul. – Shilly