JavaScript für ungeduldige Programmierer (ES2022-Ausgabe)
Bitte unterstützen Sie dieses Buch: kaufen Sie es oder spenden Sie
(Werbung, bitte nicht blockieren.)

36 WeakSets (WeakSet) (fortgeschritten)



WeakSets sind ähnlich wie Sets, mit den folgenden Unterschieden

Da wir ihre Elemente nicht iterieren können, gibt es nicht viele Anwendungsfälle für WeakSets. Sie ermöglichen uns jedoch, Objekte zu markieren.

36.1 Beispiel: Objekte als sicher zur Verwendung mit einer Methode markieren

Der folgende Code zeigt, wie eine Klasse sicherstellen kann, dass ihre Methoden nur auf Instanzen angewendet werden, die von ihr erstellt wurden (basierend auf Code von Domenic Denicola)

const instancesOfSafeClass = new WeakSet();

class SafeClass {
  constructor() {
    instancesOfSafeClass.add(this);
  }

  method() {
    if (!instancesOfSafeClass.has(this)) {
      throw new TypeError('Incompatible object!');
    }
  }
}

const safeInstance = new SafeClass();
safeInstance.method(); // works

assert.throws(
  () => {
    const obj = {};
    SafeClass.prototype.method.call(obj); // throws an exception
  },
  TypeError
);

36.2 WeakSet API

Der Konstruktor und die drei Methoden von WeakSet funktionieren genauso wie ihre Set-Äquivalente