Wie andere Programmiersprachen verfügt auch Javascript über viele Entwurfsmuster, wie z. B. Singleton-Modus, Proxy-Modus, Beobachtermodus usw. Kompetente Verwendung von Javascript-Entwurfsmuster können unsere Codelogik klarer und einfacher zu warten und umzugestalten machen.
In diesem Artikel wird der häufigere und praktischere Modus im Javascript-Modus vorgestellt – der Singleton-Modus, der hauptsächlich in Konzepte und Beispiele unterteilt ist. Bei der Einführung von Beispielen werden auch zusätzliche Wissenspunkte im Code erläutert.
Was ist zunächst einmal ein Singleton-Muster? Dies kann folgendermaßen verstanden werden: Das Singleton-Muster zielt darauf ab, sicherzustellen, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt bereitstellt.
Vielleicht verstehen einige Leute das Konzept von Singleton immer noch nicht, also können Sie sich einige Beispiele aus dem Leben vorstellen. Wenn beispielsweise bei der Registrierung eines Kontos das von uns registrierte Konto bereits existiert, werden wir vom System gefragt: „Das Konto existiert bereits. Möchten Sie dieses Konto zum Anmelden verwenden?“ Wir können kein identisches Konto erneut erstellen, es sei denn, wir kündigen das ursprüngliche Konto. Dies ist eine anschauliche Verkörperung des Singleton-Musters.
Ein ähnliches Beispiel ist das Anmelde-Popup-Fenster auf der Webseite. Unabhängig davon, wie oft wir auf die Anmeldeschaltfläche klicken, wird immer nur ein Anmelde-Popup-Fenster auf der Benutzeroberfläche angezeigt man kann nicht erschaffen werden.
In diesem Artikel wird das Anmelde-Popup-Fenster als Beispiel verwendet, um die Verwendung des Singleton-Modus vorzustellen.
Die Demo-Adresse lautet: Pop-up-Box-Instanz
Der Code zum Erstellen einer Popup-Box-Instanz im Singleton-Modus kann von jedem anders geschrieben werden, aber der Zweck ist derselbe: eine weltweit einzigartige und zugängliche Popup-Box zu erstellen. Als nächstes setzen wir dieses Beispiel Schritt für Schritt um.
(1) Holen Sie sich das DOM-Objekt
var $ = function(id) { return typeof id === 'string' ? document.getElementById(id) : id; };
Um einige nachfolgende Vorgänge am DOM zu erleichtern, verwenden wir zunächst das Funktionsprinzip Programmieren, um die Ziel-ID zu erhalten. Die Elementobjektmethode ist gekapselt und kann direkt mit $(id) abgerufen werden.
(2) Popup-Frame-Konstruktor
var Modal = function(id, html) { this.html = html; this.id = id; this.open = false; };
Hier deklarieren wir ein Modal als Konstruktor des Popup-Frames und definieren das öffentliche Attribut html darin, id und offen. HTML wird verwendet, um den Inhalt innerhalb des Popup-Felds zu definieren, id wird verwendet, um den ID-Namen für das Popup-Feld zu definieren, und open wird verwendet, um zu bestimmen, ob das Popup-Feld geöffnet ist.
(3) offene Methode
Modal.prototype.create = function() { if (!this.open) { var modal = document.createElement('p'); modal.innerHTML = this.html; modal.id = this.id; document.body.appendChild(modal); setTimeout(function() { modal.classList.add('show'); }, 0); this.open = true; } };
Wir definieren die Erstellungsmethode in der Prototypenkette von Modal. Innerhalb der Methode erstellen wir eine Popup-Box und fügen sie ein Fügen Sie dem DOM gleichzeitig einen Animationseffekt mit der Klasse „show“ hinzu. Hier ist eine kurze Einführung in classList:
classList ist ein praktischeres Attribut zum Bedienen der Elementklasse als className, ist jedoch hinsichtlich der Kompatibilität nicht mit Versionen unter IE10 kompatibel:
Die bereitgestellten Klassenoperationsmethoden ähneln denen von jQuery und umfassen hauptsächlich
add(class1, class2, …), um einen oder mehrere Klassennamen hinzuzufügen Das Element entfernt, ähnlich wie addClass()
remove(class1, class2, …) von jQuery, einen oder mehrere Klassennamen aus dem Element, ähnlich wie removeClass()
<🎜 von jQuery >(4) Close-Methode
Modal.prototype.delete = function() { if (this.open) { var modal = $(this.id); modal.classList.add('hide'); setTimeout(function() { document.body.removeChild(modal); }, 200); this.open = false; } };
(5) Erstellen Sie eine Instanz
var createIntance = (function() { var instance; return function() { return instance || (instance = new Modal('modal', '这是一个弹框')) } })();
Schließung, um die private Instanzvariable zu kapseln und eine Funktion zurückzugeben
(6) Schaltflächenbedienung
var operate = { setModal: null, open: function() { this.setModal = createIntance(); this.setModal.create(); }, delete: function() { this.setModal ? this.setModal.delete() : ''; } };
(7) Bindungsereignisse
$('open').onclick = function() { operate.open(); }; $('delete').onclick = function() { operate.delete(); };