Ein Monolith ist ein Objekt, das verwendet wird, um einen Namespace zu teilen und einige verwandte Attribute und Methoden zu organisieren. Wenn sie instanziiert werden kann, kann sie nur einmal instanziiert werden (sie kann nur einmal heiraten, nicht die zweite Ehe).
Das monolithische Muster ist eines der grundlegendsten, aber nützlichsten Muster in JavaScript.
Merkmale:
1. kann verwendet werden, um Namespaces zu teilen, um die Gefahren oder Auswirkungen globaler Variablen zu löschen.
2. Verwenden Sie die Verzweigungstechnologie, um die Unterschiede zwischen Browsern zu verkörpern.
3. Der Code kann auf eine Weise eher organisiert werden, was das Lesen und Aufrechterhalten erleichtert.
Grundes Schreiben des Einzelkörpermodus:
/* Das grundlegendste Monomer -Muster*/ var sie = {Name: 'Anna', Sex: 'Frauen', sagen: function () {// eine Verarbeitungslogik ...}, do: function () {// Andere Verarbeitungsfunktionen ...}}}1. Divide Namespace:
var box = {width: 0, Höhe: 0, getArea: function () {return this.width * this.width; // Der Zugriff auf Objekte in JS muss angezeigt werden, dh dies kann nicht weggelassen werden}, init: function (w, h) {// width = w; // height = h; Diese Methode entspricht der Definition von zwei globalen Variablen (Variablen, die nicht mit var deklariert sind, globale Variablen) // keine Zuordnung zur Breite und Höhe des Objekts // Folgendes ist die richtige. this.height = h;}} // Box teilt einen Namespace auf, und die Variablen im Namespace sind nur im Raum gültigAlle Mitglieder und Methoden im obigen Monomer sind öffentlich, dh sie können willkürlich außerhalb des Monomers verändert werden (aber sie können jedoch nicht auf lokale Variablen zugreifen). Warum bietet das Monomer einen Namespace an?
Mach dir keine Sorgen, lasst uns weiter schauen:
var box = {width: 0, Höhe: 0, // Die Variable von Monomer getArea: function () {Return Width * Höhe; // Breite ist keine Monomervariable, sondern eine globale Variable, die in init} init: function (w, h) {width = w; Height = H;}} // Init, init, init, init, init, init, init init, keine monomer variable. box.getArea (); alert (init);}Da die Breite und Höhe in Init nicht initialisiert werden, wird ein Fehler gemeldet. Ändern Sie sie also wie folgt:
var box = {width: 0, Höhe: 0, getArea: function () {return width * Höhe;}, init: function (w, h) {width = w; height = h;}} Fenster.Es wurde festgestellt, dass es in Ordnung ist. Da die von Init und GetArea verwendete Breite und Höhe keine Variablen sind, die dem Monolithen gehören, sondern eine globale Variable sind, können wir zufällige Anrufe außerhalb des Monolithen tätigen, ohne betroffen zu sein.
var box = {width: 0, Höhe: 0, getArea: function () {return width * Höhe; // Der Zugriff des Objekts in js muss angezeigt werden, das heißt, dies kann nicht weggelassen werden}, init: function (w, h) {width = w; h; h;}} // Die Breite von breit = 0; box.getArea (); alert (width);}Auf diese Weise wird berichtet, dass ein Fehler gemeldet wird. Es ist ersichtlich, dass unsere obige Methode keinen Namespace für globale Variablen erstellt und globale Variablen uns Gefahr bringen. Das obere Wort ist also korrekt. Überprüfen wir:
var box = {width: 2, Höhe: 2, getArea: function () {return this.width * thishy.height; / / js Zugriff muss angezeigt werden, das heißt, dies kann nicht weggelassen werden}, init: function (w, h) {this.width = w; this.height = h;}} Fenster. // Es wirkt sich nicht auf die lokalen Variablen im Monolithen aus, dh die Namespace -Höhe = 0; // Es wirkt sich nicht auf die lokalen Variablen im Monolith aus, dh den Namespace var width = box.getArea (); alert (width);}Es ist zu erkennen, dass Breite und Höhe im Fenster keine Störung haben, da Monomere einen Namespace für Breite und Höhe in Monomeren festgelegt haben.
2. Mitgliedereigenschaften:
Obwohl es in JavaScript keinen solchen strengen objektorientierten (OOP) gibt, können wir Schließungen verwenden, um es nachzuahmen. Schließlich ist es nicht gut, einige Variablen an die Öffentlichkeit zu setzen.
var sie = (function () {var name = 'Anna'; var sex = 'women'; return {getArea: function () {return name + 'ist a' + sex;}, init: function (b) {name = b;}}}) (); Window.onload = Funktion () {HER.Name = 'Jock'; // kann nicht auf Alert zugreifen (Ger.getArea ()); Her.init ('lous'); alert (her.getarea ());};}Private Variablen und Methoden sind nur schreibgeschützt, während öffentliche Variablen und Methoden gelesen werden können.
Zugang:
Für private Mitglieder können Sie direkt ohne Änderungen vor ihnen zugreifen.
Für den öffentlichen Zugang "das". sollte vor dem Monomerumfang hinzugefügt werden und „sie“. (Monobody Name.)
3.. Verwenden Sie die Zweig -Technologie, um Unterschiede zwischen Browsern zu verkapulieren
Anmerkungen:
A. Stellen Sie sicher, dass Sie Schließungen verwenden, um eine sofortige Bindung zu erreichen
B. Trennen Sie jeden Zweig mit einem Semikolon
C. Das Letzte, was zurückgibt, ist der Name des Zweigs
D. Verwenden Sie den einzelnen Namen + Zweigmethodenname beim Aufrufen;
// Verwenden Sie die Monomer -Verzweigungs -Technologie, um XHR (xmlhttpRequest) -Objekte zu definieren, und Sie müssen einen Verschluss verwenden, um var xhr = (function () {// Die drei Zweigzweige zu implementieren. ActiveXObject ('msxml2.xmlhttp');}}; var activeXold = {cxhr: function () {return New ActiveXObject ('microsoft.xmlHttp');}}}; // zuweisen (zuweisen) Die Zweig -Methode zurückgeben. Wenn kein Fehler geworfen wurde} catch (e) {try {testObject = activexNew.cxhr (); return activexNew;} catch (e) {try {testObject = activeXold.cxhr () return activexNew;} catch (e) {try {testobject = active. XmlhttprequestObject fehlgeschlagen! ');Das obige ist eine umfassende Analyse des Einzelkörpermodells des vom Editor eingeführten JavaScript-Designmuster. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!