1. Prototyp-ModusDas Prototypmuster wird verwendet, um die Leistung zu verbessern, den Speicherverbrauch zu reduzieren und Code wiederzuverwenden, indem beim Erstellen eines Objekts die Eigenschaften und Methoden eines Objektprototyps gemeinsam genutzt werden. Beispiel 1Funktion Person(Name) { dieser.name = Name; diese.config = { a: "1", b: "2", }; dies.hallo = Funktion () { console.info("hallo"); }; } Wenn Sie mit dem obigen Code 100 Instanzen erstellen müssen, müssen Sie 100 Daher können wir durch Extrahieren gemeinsamer Codes eine Öloptimierung durchführen. const konfiguration = { a: "1", b: "2", }; const hallo = Funktion () { console.info("hallo"); }; Funktion Person(Name) { dieser.name = Name; diese.config = Konfiguration; this.hallo = hallo } Auf diese Weise müssen unabhängig davon, wie viele Personenobjekte erstellt werden, nur eine Daher kann eine Optimierung durch Prototyping durchgeführt werden. Funktion Person() {} var p = neue Person(); Das Prototypdiagramm dieser Funktion beim Erstellen einer Instanz sieht wie folgt aus: Beispiel 2Funktion Person(Name) { dieser.name = Name; diese.config = { a: "1", b: "2", }; dies.hallo = Funktion () { console.info("hallo"); }; } //Diese Methode schreibt den Prototyp neu, wodurch der Konstruktor verloren geht und zu Object() wird. //Sie können Person.prototype.xx=yy verwenden, um Person.prototype.constructor=Person zu schreiben, oder es neu angeben Person.Prototyp = { Version: 1.0, sagen wir: Funktion (Argument) { console.info(`${this.name} sagt ${arg}`); }, Konstrukteur: Person, }; var p1 = neue Person("p1"); var p2 = neue Person("p2"); console.info(p1.config == p2.config); //false console.info(p1.hallo == p2.hallo); //falsch konsole.info(p1.say === p2.say); //wahr p1.sagen("qq"); p2.sagen("qq"); konsole.info(p1.version === p2.version); //wahr konsole.info(p1.version); Das Prototypdiagramm dieser Funktion beim Erstellen einer Instanz sieht wie folgt aus: Beispiel 3Funktion Person(Name) { dieser.name = Name; diese.config = { a: "1", b: "2", }; dies.hallo = funktion () { console.info("hallo"); }; } //Diese Methode schreibt den Prototyp neu, wodurch der Konstruktor verloren geht und zu Object() wird Person.Prototyp = { Version: 1.0, sagen wir: Funktion (Argument) { console.info(`${this.name} sagt ${arg}`); }, }; Funktion PersonA(Name) { Person.call(dieser, Name); } PersonA.prototype = Person.prototype; Funktion PersonB(Name) { Person.call(dieser, Name); } PersonB.prototype = Person.prototype; var pA = neue PersonA("pa"); var pB = neue PersonB("pb"); console.info(pA.config == pB.config); //falscher interner Eigenschaftsvergleich console.info(pA.hello == pB.hello); //falscher interner Eigenschaftsvergleich console.info(pA.say === pB.say); //true gemeinsame Nutzung von Prototypmethoden pA.say("qq"); pB.say("qq"); console.info(pA.version === pB.version); //echte gemeinsame Nutzung von Prototyp-Eigenschaften console.info(pA.version); //1.0 Person.prototype.version = 2.0; //Gemeinsame Eigenschaften des Prototyps ändern console.info(pB.version); //2.0 konsole.info(neue Person().version); //2.0 //Ändern Sie die Methode zum Teilen des Prototyps PersonB.prototype.say = function (arg) { console.info(`v2--- ${this.name} sagt ${arg}`); }; pB.say("qq"); neue Person("Person").sagen("ww"); Zusammenfassen:
2. Beobachtermuster
Kommunikationsmethoden zwischen Modulen und Komponenten Zwischen Modulen und Komponenten wird eine direkte Referenzkommunikation verwendet const ModulA = { sagen Sie: Funktion (Nachricht) { console.info("A sagen " + msg); }, letBrun: Funktion () { //Direkt auf Modul B verweisen moduleB.run(); }, }; const ModulB = { ausführen: Funktion () { console.info("B ausführen "); }, letAsay: Funktion () { //Direkt auf ModulA verweisen moduleA.say("hallo"); }, }; moduleA.letBrun(); //B Ausführen moduleB.letAsay(); //A sag Hallo Die übergeordnete Komponentenkommunikation wird zwischen Modulen und Komponenten verwendet. const ModulA = { sagen Sie: Funktion (Nachricht) { console.info("A sagen " + msg); }, }; const ModulB = { ausführen: Funktion () { console.info("B ausführen "); }, }; const übergeordnetesModul = { ModulA, Modul B, letBrun: Funktion () { dies.moduleB.run(); }, letAsay: Funktion () { dies.moduleA.say("hallo"); }, }; parentModule.letBrun(); //B Ausführen parentModule.letAsay(); //A sag Hallo Eventmodul realisiert Kommunikation Funktion Emitter() { diese.ereignisse = {}; this.res_oldAction = {} diese.res_action_events = {} } //Ressourcen abonnierenEmitter.prototype.subscribe = function (res, action, fn) { wenn(!this.res_oldAction[res.name]){ this.res_oldAction[res.name] = res[Aktion] res[Aktion] = (Daten) => { this.res_oldAction[res.name](Daten) const fns = this.res_action_events[res.name].action; für (lass i = 0; i < fns.Länge; i++) { fns[i](Daten); } } } wenn(!this.res_action_events[res.name]){ this.res_action_events[res.name] = {} } wenn(!this.res_action_events[res.name][Aktion]){ this.res_action_events[res.name][Aktion] = [] } dies.res_action_events[res.name].action.push(fn) } //Abonnement kündigen resourcesEmitter.prototype.unsubscribe = function (res, action, fn) { const fns = this.res_action_events[res.name].action; für (lass i = 0; i < fns.Länge; i++) { wenn (fns[i] === fn) { fns.splice(i, 1); ich--; } } } Emitter.prototype.on = Funktion (Name, fn) { wenn (!this.events[name]) { diese.events[name] = []; } dies.events[name].push(fn); }; Emitter.prototype.remove = Funktion (Name, fn) { wenn (!this.events[name]) { zurückkehren; } const fns = diese.events[name]; für (lass i = 0; i < fns.Länge; i++) { wenn (fns[i] === fn) { fns.splice(i, 1); ich--; } } }; Emitter.prototype.fire = Funktion (Name, Daten) { wenn (!this.events[name]) { zurückkehren; } const fns = diese.Ereignisse[Name]; für (lass i = 0; i < fns.Länge; i++) { fns[i](Daten); } }; const emitter = neuer Emitter(); //Ereignisse in Modul A registrieren const methodA = (data) => { console.info("Modul A hat eine Essensnachricht erhalten:"); konsole.info(Daten); }; emitter.on("Essen", MethodeA); //Ereignisse in Modul B registrieren const methodB = (data) => { console.info("Modul B empfängt Lebensmittelnachricht:"); konsole.info(Daten); }; emitter.on("Essen", MethodeB); //Ereignis in Modul C auslösen emitter.fire("food", "Rice is coming"); //Ereignis aus Modul B entfernen emitter.remove("food", methodB); //Löse das Ereignis in Modul C erneut aus. emitter.fire("food", "Rice is here again"); Die Ausführungsergebnisse sind wie folgt:
Zusammenfassen:
Dies ist das Ende dieses ausführlichen Artikels über das Prototypmuster des Javascript-Entwurfsmusters. Weitere relevante Inhalte zum Javascript-Prototypmuster finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Analyse des Funktionsprinzips und des Implementierungsprozesses von Docker Hub
Ich möchte nur eine kleine Sache machen, die Winf...
Spezifische Methode: Schritt 1: Stoppen Sie den M...
Über let, um Probleme durch Schließung zu vermeid...
Inhaltsverzeichnis dva Verwendung von dva Impleme...
docker-compose-monitor.yml Version: '2' N...
So schreiben Sie DROP TABLE in verschiedene Daten...
Inhaltsverzeichnis Vorwort 1. Grundlegende Verwen...
Bei der täglichen Wartung werden Threads häufig b...
Definition und Verwendung: Verwenden Sie die Slot...
Problembeschreibung Wenn filter im body verwendet...
1. Einleitung Es wird seit Version 5.0 unterstütz...
1. Mechanismus des Linux-Kernel-Treibermoduls Sta...
1. Stellen Sie zunächst einige häufig verwendete ...
Einführung in jQuery Die jQuery-Bibliothek kann e...
Lassen Sie uns heute einen einfachen 3D-Zauberwür...