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

Lernen Sie die Ausführungsreihenfolge von SQL-Abfragen von Grund auf

Die Ausführungsreihenfolge der SQL-Abfrageanweisu...

Mysql-Timeline-Daten, um die ersten drei Daten desselben Tages zu erhalten

Erstellen von Tabellendaten CREATE TABLE `praise_...

Detaillierte Erklärung des Kopierobjekts von jQuery

<!DOCTYPE html> <html lang="de"...

HTML-Formular_PowerNode Java Academy

1. Formular 1. Die Rolle des Formulars HTML-Formu...

Detaillierte Erklärung der Verwendung und Erfahrung mit tinyMCE

Detaillierte Erklärung der tinyMCE-Verwendung Ini...

JavaScript navigator.userAgent erhält Browserinformationen – Fallerklärung

Der Browser ist für uns wahrscheinlich das vertra...

Detaillierte Erläuterung des Grafikbeispiels für Vue-Überwachungsattribute

Inhaltsverzeichnis Was ist die Listener-Eigenscha...

So installieren Sie Babel mit NPM in VSCode

Vorwort Im vorherigen Artikel wurde die Installat...

Mysql speichert Baumstruktur durch Adjazenzliste (Adjazenzliste)

Der folgende Inhalt stellt den Prozess und die Lö...

Wissen Sie, wie viele Verbindungen ein Linux-Server verarbeiten kann?

Vorwort Sehen wir uns zunächst an, wie eine TCP-V...