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
CentOS 8 hat das Installationsprogramm für Softwa...
Das Betriebssystem für die folgenden Inhalte ist:...
1. Stilobjekt Das Stilobjekt stellt eine einzelne...
1. Wie oben erwähnt Ich habe dieses Makro gesehen...
Weiterführende Literatur: Beheben Sie das Problem...
<base target=_blank> ändert den Zielrahmen d...
Öffnen Sie eine beliebige Webseite, zum Beispiel ...
Beim Front-End-Layout des Formulars müssen wir hä...
Werfen wir einen Blick auf das dynamische Spleiße...
Was ist nGrinder? nGrinder ist eine Plattform für...
1. Erstellen Sie eine neue virtuelle Maschine in ...
Inhaltsverzeichnis 1. Einführung in NFS 2. NFS-Ko...
Die unten zusammengefassten Wissenspunkte werden ...
Kürzlich wurde auf Unternehmensseite gemeldet, da...
Inhaltsverzeichnis Vorwort Die Beziehung zwischen...