WeakSet
)(進階)WeakSets 類似於 Sets,但有以下差異
它們可以保存物件,而不會阻止這些物件被垃圾回收。
它們是黑盒子:我們只有在同時擁有 WeakSet 和一個值時,才能從 WeakSet 中取得任何資料。唯一支援的方法是 .add()
、.delete()
、.has()
。參閱 WeakMaps 作為黑盒子 一節,了解為何 WeakSets 不允許反覆運算、迴圈和清除。
由於我們無法反覆運算其元素,因此 WeakSets 的使用案例並不多。它們確實能讓我們標記物件。
以下程式碼展示一個類別如何確保其方法僅套用於由它建立的執行個體(根據 Domenic Denicola 的程式碼)
const instancesOfSafeClass = new WeakSet();
class SafeClass {
constructor() {
.add(this);
instancesOfSafeClass
}
method() {
if (!instancesOfSafeClass.has(this)) {
throw new TypeError('Incompatible object!');
}
}
}
const safeInstance = new SafeClass();
.method(); // works
safeInstance
.throws(
assert=> {
() const obj = {};
.prototype.method.call(obj); // throws an exception
SafeClass,
}TypeError
; )
WeakSet
的建構函式和三個方法與 其等效的 Set
相同
new WeakSet<T>(values?: Iterable<T>)
[ES6].add(value: T): this
[ES6].delete(value: T): boolean
[ES6].has(value: T): boolean
[ES6]