Detaillierte Erklärung des JavaScript-Proxy-Objekts

Detaillierte Erklärung des JavaScript-Proxy-Objekts

1. Was ist ein Proxy?

Das Proxy-Objekt wird verwendet, um bestimmte Vorgänge des Zielobjekts abzufangen und zu ändern.

// Syntax const p = neuer Proxy(Ziel, Handler)
  • Ziel: Das Zielobjekt (kann jeder beliebige Objekttyp sein, einschließlich eines nativen Arrays, einer Funktion oder sogar eines anderen Proxys).
  • Handler: Ein Objekt mit Funktionen als Attributen zum Implementieren von Interception- und benutzerdefinierten Vorgängen.

2. Wie wird es verwendet?

1. Einfaches Beispiel für die Verwendung von Proxy

Beim Zugriff auf eine nicht vorhandene Eigenschaft wird der Standardwert „return“ (zurückgeben) anstelle von „undefiniert“ festgelegt.

// 1. Suchen Sie einen geeigneten Handler und schreiben Sie den Code const handler = {
    bekomme: Funktion(Objekt, Eigenschaft) {
        Gibt Eigenschaft in Objekt zurück? Objekt[Eigenschaft]: 37;
    }
};
// 2. Erstellen Sie ein neues Proxy-Objekt const p = new Proxy({}, handler);
// 3. Operation ausführen pa = 1;
pb = undefiniert;
// 4. Überprüfen Sie die Ergebnisse console.log(pa, pb); // 1, undefiniert
console.log('c' in p, pc); // falsch, 37

2. Das Zielobjekt wird korrekt geändert

lass Ziel = {};
lass p = neuer Proxy(Ziel, {});
pa = 37; // Die Operation wird an das Ziel weitergeleitet console.log(target.a); // 37. Die Operation wurde korrekt weitergeleitet

3. Verwenden Sie Set-Handler zur Datenvalidierung

let validator = {
  setze: Funktion(Objekt, Eigenschaft, Wert) {
    wenn (Eigenschaft === 'Alter') {
      wenn (!Number.isInteger(value)) {
        throw new TypeError('Das Alter ist keine Ganzzahl');
      }
      wenn (Wert > 200) {
        throw new RangeError('Das Alter scheint ungültig zu sein');
      }
    }
    // Das Standardverhalten zum Speichern des Wertes
    obj[Eigenschaft] = Wert;
    // Zeigt Erfolg an return true;
  }
};
let person = neuer Proxy({}, Validator);
Person.Alter = 100;
Konsole.log(Person.Alter);
// 100
Person.Alter = "jung";
// Löst eine Ausnahme aus: Nicht abgefangener TypeError: Das Alter ist keine Ganzzahl
Person.Alter = 300;
// Löst eine Ausnahme aus: Uncaught RangeError: Das Alter scheint ungültig

4. Erweiterter Konstruktor

Funktion erweitern(sup, base) {
  var descriptor = Object.getOwnPropertyDescriptor(
    base.prototype, "Konstruktor"
  );
  base.prototype = Objekt.erstellen(sup.prototype);
  var handler = {
    Konstrukt: Funktion(Ziel, Argumente) {
      var obj = Objekt.create(base.prototype);
      dies.anwenden(Ziel, Objekt, Argumente);
      gibt Objekt zurück;
    },
    anwenden: Funktion(Ziel, das, Argumente) {
      sup.apply(das, args);
      base.apply(das, Argumente);
    }
  };
  var Proxy = neuer Proxy (Basis, Handler);
  Deskriptor.Wert = Proxy;
  Object.defineProperty(base.prototype, "Konstruktor", Deskriptor);
  Proxy zurückgeben;
}
var Person = Funktion (Name) {
  dieser.name = Name
};
var Junge = erweitern(Person, Funktion (Name, Alter) {
  dieses.Alter = Alter;
});
Junge.Prototyp.Geschlecht = "M";
var Peter = neuer Junge("Peter", 13);
console.log(Peter.sex); // "M"
console.log(Peter.name); // "Peter"
console.log(Peter.age); // 13

Zusammenfassen

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

Das könnte Sie auch interessieren:
  • Proxy-Objekt in JavaScript
  • Detaillierte Erklärung des Prinzips des js-Proxys
  • JS führt Sie tief in die Welt von Proxy
  • Spezifische Verwendung von ES6-Proxy in JavaScript
  • Welche interessanten Dinge kann JavaScript Proxy tun?

<<:  Schriftreferenzen und Übergangseffekte außerhalb des Systems

>>:  Einführung in die Verschlüsselung des Grub-Boot-Programms in Linux

Artikel empfehlen

Vergleich zweier Implementierungsmethoden der Vue-Dropdown-Liste

Zwei Implementierungen der Vue-Dropdown-Liste Die...

Detaillierte Erklärung zur Verwendung der JavaScript-Zwischenablage

(1) Einleitung: clipboard.js ist ein leichtes Jav...

MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis

Oftmals erwarten wir, dass das Abfrageergebnis hö...

Eine detaillierte Einführung in die Verwendung von Blockkommentaren in HTML

Allgemeine Kommentare in HTML: <!--XXXXXXXX--&g...

Vue implementiert Dialogkapselung

Inhaltsverzeichnis Vue2-Schreiben Schreiben der V...

Detaillierte Schritte zur Verwendung von AES.js in Vue

Verwendung der AES-Verschlüsselung Verschlüsselun...

JS Canvas-Oberfläche und Animationseffekte

Inhaltsverzeichnis Überblick Canvas API: Grafiken...

Warum sind die Bilder in mobilen Web-Apps nicht klar und sehr verschwommen?

Warum? Am einfachsten lässt es sich so ausdrücken:...

Implementierung der Docker-Container-Statuskonvertierung

Ein Zustandsübergangsdiagramm eines Docker-Contai...