JavaScript - Das WeakMap-Objekt

Hallo, zukünftige JavaScript-Entwickler! Heute tauchen wir ein in einen aufregenden und etwas geheimnisvollen Teil von JavaScript: das WeakMap-Objekt. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind; ich werde Sie durch dieses Konzept Schritt für Schritt führen, genau wie ich es in den letzten Jahren für unzählige Schüler getan habe. Also holen Sie sich eine Tasse Kaffee (oder Tee, wenn das mehr Ihr Ding ist) und lassen Sie uns gemeinsam dieses WeakMap-Abenteuer beginnen!

JavaScript - WeakMap

Was ist eine WeakMap?

Bevor wir ins Detail gehen, lassen Sie uns verstehen, was eine WeakMap ist. Stellen Sie sich eine magische Box vor, in der Sie Ihre Spielzeuge aufbewahren können, aber diese Box hat einige besondere Eigenschaften. Sie akzeptiert nur Objekte als Schlüssel (keine Strings oder Zahlen erlaubt!) und hat die seltsame Gewohnheit, Spielzeuge zu vergessen, wenn Sie eine Weile nicht damit spielen. Das ist im Wesentlichen, was eine WeakMap in JavaScript ist - eine Sammlung, die nur Objekte als Schlüssel verwenden kann und nicht verhindert, dass diese Objekte vom Garbage Collector entfernt werden, wenn sie elsewhere in Ihrem Programm nicht mehr benötigt werden.

Syntax

Schauen wir uns an, wie wir eine WeakMap erstellen und verwenden:

let meineWeakMap = new WeakMap();

Einfach, oder? Wir rufen new WeakMap() auf, und voilà, unsere magische Box ist bereit zum Gebrauch!

WeakMap-Eigenschaften

Nun, Sie werden sich vielleicht denken: "Großartig! Welche Eigenschaften kann ich auf dieser WeakMap zugreifen?"Nun, hier ist ein interessantes Fact: WeakMaps haben keine enumerable Eigenschaften. Es ist, als ob unsere magische Box ihre Geheimnisse nicht leicht preisgeben will. Aber keine Sorge, wir haben Methoden, um mit ihr zu interagieren!

WeakMap-Methoden

WeakMaps verfügen über ein kleines aber mächtiges Set von Methoden. Schauen wir uns diese in einer praktischen Tabelle an:

Methode Beschreibung
set(key, value) Fügt ein neues Element mit einem angegebenen Schlüssel und Wert hinzu
get(key) Gibt den Wert zurück, der mit dem angegebenen Schlüssel verknüpft ist
has(key) Gibt einen Boolean-Wert zurück, der anzeigt, ob ein Element mit dem angegebenen Schlüssel existiert
delete(key) Entfernt das angegebene Element aus der WeakMap

Lassen Sie uns diese Methoden in Aktion sehen!

set(key, value)

let obj1 = {};
let obj2 = {};

let meineWeakMap = new WeakMap();
meineWeakMap.set(obj1, "Hallo");
meineWeakMap.set(obj2, "Welt");

In diesem Beispiel fügen wir zwei Schlüssel-Wert-Paare zu unserer WeakMap hinzu. Beachten Sie, wie wir Objekte (obj1 und obj2) als Schlüssel verwenden. Wenn wir versucht hätten, einen String oder eine Zahl als Schlüssel zu verwenden, würde JavaScript schneller als Sie "WeakMap" sagen, einen Fehler werfen!

get(key)

console.log(meineWeakMap.get(obj1)); // Ausgabe: "Hallo"
console.log(meineWeakMap.get(obj2)); // Ausgabe: "Welt"

Hier holen wir die Werte, die mit unseren Objekt-Schlüsseln verknüpft sind. Es ist, als ob wir unserer magischen Box fragen: "Hey, welches Spielzeug habe ich mit diesem Schlüssel aufbewahrt?"

has(key)

console.log(meineWeakMap.has(obj1)); // Ausgabe: true
console.log(meineWeakMap.has({}));   // Ausgabe: false

Die has-Methode ist wie ein Türsteher in einem Club. Sie überprüft, ob ein bestimmter Objekt-Schlüssel in unserer WeakMap ist. In diesem Fall ist obj1 erlaubt, aber das neue leere Objekt {} wird an der Tür abgewiesen.

delete(key)

meineWeakMap.delete(obj1);
console.log(meineWeakMap.has(obj1)); // Ausgabe: false

Mit delete sagen wir unserer WeakMap: "Ich will nicht mehr mit diesem Spielzeug spielen." Nach dem Löschen ist obj1 nicht mehr in unserer WeakMap.

WeakMap-Konstruktor()

Der WeakMap-Konstruktor kann auch ein iterierbares Objekt von Schlüssel-Wert-Paaren akzeptieren. Hier ist ein Beispiel:

let obj3 = {};
let obj4 = {};

let meineWeakMap2 = new WeakMap([
[obj3, "Wert 1"],
[obj4, "Wert 2"]
]);

console.log(meineWeakMap2.get(obj3)); // Ausgabe: "Wert 1"

Das ist wie dem unseren magischen Box mitzuteilen: "Hier ist eine Liste von Spielzeugen und wo ich sie aufbewahren möchte" direkt von Anfang an.

Beispiele

Nun, da wir die Grundlagen abgedeckt haben, schauen wir uns einige realistische Beispiele an, in denen WeakMaps nützlich sein können.

Beispiel 1: Private Daten

WeakMaps sind großartig zum Speichern privater Daten, die mit Objekten verknüpft sind:

let privateData = new WeakMap();

class Person {
constructor(name, age) {
privateData.set(this, { name: name, age: age });
}

getName() {
return privateData.get(this).name;
}

getAge() {
return privateData.get(this).age;
}
}

let john = new Person("John", 30);
console.log(john.getName()); // Ausgabe: "John"
console.log(john.getAge());  // Ausgabe: 30

In diesem Beispiel verwenden wir eine WeakMap, um private Daten für unsere Person-Klasse zu speichern. Die Daten sind mit jeder Instanz von Person verknüpft, aber sie können nicht direkt von außerhalb der Klassenmethoden zugriffen werden.

Beispiel 2: Caching

WeakMaps können verwendet werden, um berechnete Ergebnisse zu cachen, ohne Speicherlecks zu verursachen:

let cache = new WeakMap();

function teureOperation(obj) {
if (cache.has(obj)) {
console.log("Gebe gespeicherte Ergebniss zurück");
return cache.get(obj);
}

let ergebnis = /* ... teure Berechnung ... */;
cache.set(obj, ergebnis);
return ergebnis;
}

let obj = {};
teureOperation(obj); // Führt Berechnung durch
teureOperation(obj); // Gibt gespeichertes Ergebniss zurück

In diesem Beispiel verwenden wir eine WeakMap, um die Ergebnisse einer teuren Operation zu cachen. Wenn die Operation zuvor für ein bestimmtes Objekt durchgeführt wurde, geben wir das gespeicherte Ergebnis zurück, anstatt neu zu berechnen.

Schlussfolgerung

Und da haben Sie es, Leute! Wir haben die geheimnisvolle Welt der WeakMaps in JavaScript erkundet. Von ihren einzigartigen Schlüsselanforderungen bis hin zu ihrer garbage collection-freundlichen Natur bieten WeakMaps eine mächtige Werkzeug für spezifische Anwendungsfälle in Ihren JavaScript-Programmen.

Denken Sie daran, WeakMaps sind wie dieser schrullige Freund, der nur Gesichter und keine Namen remembers und neigt dazu, Leute zu vergessen, die er eine Weile nicht gesehen hat. Sie sind nicht für jede Situation geeignet, aber wenn Sie sie brauchen, sind sie unersetzlich.

Wenn Sie Ihre JavaScript-Reise fortsetzen, behalten Sie WeakMaps in Ihrem Werkzeugkasten. Man weiß nie, wann Sie private Daten speichern oder eine Cache erstellen müssen, der keine Speicherlecks verursacht. Frohes Coden und möge Ihre WeakMaps stets stark im Geist sein!

Credits: Image by storyset