Ein Artikel zum Verständnis der Verwendung von Proxys in JavaScript

Ein Artikel zum Verständnis der Verwendung von Proxys in JavaScript

Was ist ein Agent

Definition auf MDN: Proxy-Objekte werden verwendet, um benutzerdefinierte Verhaltensweisen für grundlegende Vorgänge (wie Eigenschaftssuche, Zuweisung, Aufzählung, Funktionsaufrufe usw.) zu definieren.

Die offizielle Definition ist immer so obskur und langweilig, was also genau kann Proxy?

1. Das Konzept des Agenten stammt aus der Metaprogrammierung. Dabei handelt es sich um eine Art Programm, das Programme lesen, ändern, analysieren und sogar neue Programme generieren kann. JS kann JS-Metaprogrammierung über die beiden Objekte Proxy und Reflect durchführen! !

2.Proxy ist ein Proxy. Wenn der Zugriff auf ein Objekt für uns unbequem ist oder wir mit dem einfachen Zugriff nicht zufrieden sind, kann der Proxy als „Vermittler“ fungieren, um uns zu helfen, den Betrieb des Objekts besser zu kontrollieren! !

Grundkenntnisse zum Thema Proxy

Grammatik:

const handler = {};
let target = {}; //Zielobjekt let userProxy = new Proxy(target,handler); //Proxy wurde erfolgreich implementiert! !
BenutzerProxy.a = 1;
konsole.log(ziel.a);//1
console.log(Ziel == Benutzerproxy); //falsch

target : das Zielobjekt, das mit Proxy umschlossen werden soll

Handle r: Ein Objekt, das normalerweise Funktionen als Attribute hat, wobei die Funktionen in jedem Attribut das Verhalten des Agenten beim Ausführen verschiedener Operationen definieren.

OK! Dann herzlichen Glückwunsch, Sie beherrschen die Definition von Proxy.

Bei der Verwendung müssen wir dem Code des Proxy-Verhaltens im Handler mehr Aufmerksamkeit schenken, was uns helfen kann, Proxy besser zu nutzen

Methoden des Handler-Objekts

const handler = {
	get(Ziel,Eigentum,Empfänger){
		console.log('erhalten!');
		gib 'a' zurück;
	}
}
sei Ziel = {name:'tar'};
let userProxy = neuer Proxy(Ziel,Handler);
Benutzerproxy.name

Natürlich gibt es noch viele weitere Methoden, siehe MDN: Methoden von Handlerobjekten

Was Proxy leisten kann

Verfolgung des Immobilienzugriffs

Wenn wir wissen müssen, wann auf ein Objekt zugegriffen oder es geändert wird.

 lass Ziel = {
	Name: "ww"
	}
 const-Handler = {
    bekomme(tar, prop){
     	Konsole.log('get');
     	gibt Reflect.get(...Argumente) zurück; 
     },
     setze(tar,eigent){
		Konsole.log('festlegen');
		gibt Reflect.set(...Argumente) zurück;
	 }
  }
  let userProxy = neuer Proxy(Ziel, Handler);
  BenutzerProxy.name;
  BenutzerProxy.name = "wqw";

Lösen Sie das Problem undefinierter Objekteigenschaften

lass Ziel = {}
  let-Handler = {
    get: (Ziel, Eigenschaft) => {
      Ziel[Eigenschaft] = (Eigenschaft im Ziel) ? Ziel[Eigenschaft] : {}
      if (Typ von Ziel[Eigenschaft] === 'Objekt') {
        gib einen neuen Proxy zurück (Ziel[Eigenschaft], Handler)
      }
      returniere Ziel [Eigenschaft]
    }
  }
  let proxy = neuer Proxy(Ziel, Handler)
  console.log('z' in proxy.xy) // false (Tatsächlich hat dieser Schritt ein xy-Attribut für „target“ erstellt)
  proxy.xyz = "hallo"
  console.log('z' in proxy.xy) // wahr
  console.log(target.xyz) // hallo

Wir verwenden einen Proxy, um den Wert abzurufen und darin eine logische Verarbeitung durchzuführen. Wenn der Wert, den wir abrufen möchten, von einem nicht vorhandenen Schlüssel stammt, erstellen wir den entsprechenden Schlüssel im Ziel und geben dann ein Proxy-Objekt für diesen Schlüssel zurück.

Dies stellt sicher, dass unsere Wertübernahmeoperation keine Fehler auslöst. xxx kann nicht von undefined abgerufen werden.

Dies hat jedoch einen kleinen Nachteil: Wenn Sie wirklich feststellen möchten, ob der Schlüssel vorhanden ist, können Sie dies nur mit dem Operator „in“ feststellen und nicht direkt über „get“.

Quellen:

MDN-Proxy

JS-Entwurfsmuster

Welche interessanten Dinge kann Proxy tun?

Metaprogrammierung

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken können!

Das könnte Sie auch interessieren:
  • Reflexion und Proxy in Front-End-JavaScript
  • JavaScript-Entwurfsmuster, Proxy-Muster lernen
  • JavaScript-Designmuster – Prinzipien und Anwendungsbeispielanalyse des Proxy-Musters
  • JavaScript fügt Ereignis-Listener zur Ereignisdelegierung in Batches hinzu. Detaillierter Prozess
  • Tiefgreifendes Verständnis des Ereignisausführungsmechanismus von JavaScript
  • Eine kurze Analyse von Event Bubbling und Event Capture in js
  • Fallstudie zu JavaScript-Ereignisschleifen
  • Detaillierte Analyse von Javascript-Datenproxys und Ereignissen

<<:  Detaillierte Erklärung zur Installation von mysql5.7.16 aus dem Quellcode in der Centos7-Umgebung

>>:  Lösung für das Problem, dass der Bridge-Modus der virtuellen Maschine von VMware15 nicht auf das Internet zugreifen kann

Artikel empfehlen

So fügen Sie ein Lua-Modul zu Nginx hinzu

Lua installieren wget http://luajit.org/download/...

Protokoll des Kompilierungs- und Installationsprozesses des Nginx-Quellcodes

Die Installation des RPM-Pakets ist relativ einfa...

So unterstützen Sie vollständiges Unicode in MySQL/MariaDB

Inhaltsverzeichnis Einführung in utf8mb4 Fehler b...

Analyse der Prinzipien von MySQL Dirty Page Flush und Shrinking Table Space

MySQL-Dirty-Pages Aufgrund des WAL-Mechanismus er...

Detaillierte Erklärung dieses Zeigeproblems in der JavaScript-Funktion

dieses Schlüsselwort Welches Objekt ruft die Funk...

Einfache Implementierung von Mini-Vue-Rendering

Inhaltsverzeichnis Vorwort Ziel Erster Schritt: S...

Beispielcode zum Erstellen von Desktop-Anwendungen mit Vue + Electron

1.vue-Verpackung Hier verwenden wir den Befehl „v...

Ausführliche Erläuterung der Standortpriorität von Nginx

Standortausdruckstyp ~ bedeutet, dass ein regulär...

Spezifische Verwendung der MySQL-Vorbereitungsvorverarbeitung

Inhaltsverzeichnis 1. Vorverarbeitung 2. Vorbehan...

Grundkenntnisse zu MySQL – Lernhinweise

Datenbank anzeigen show databases; Erstellen eine...