WeakSet) (fortgeschritten)WeakSets sind ähnlich wie Sets, mit den folgenden Unterschieden
Sie können Objekte enthalten, ohne zu verhindern, dass diese Objekte vom Garbage Collector eingesammelt werden.
Sie sind Black Boxes: Wir erhalten nur dann Daten aus einem WeakSet, wenn wir sowohl das WeakSet als auch einen Wert haben. Die einzigen unterstützten Methoden sind .add(), .delete(), .has(). Konsultieren Sie den Abschnitt über WeakMaps als Black Boxes für eine Erklärung, warum WeakSets keine Iteration, Schleifen und kein Löschen zulassen.
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.
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
);Der Konstruktor und die drei Methoden von WeakSet funktionieren genauso wie ihre Set-Äquivalente
new WeakSet<T>(values?: Iterable<T>) [ES6].add(value: T): this [ES6].delete(value: T): boolean [ES6].has(value: T): boolean [ES6]