JSのWeakSet?

WBOY
WBOYオリジナル
2024-07-19 19:27:52325ブラウズ

WeakSet in JS?

JavaScript の WeakSet は、内部のオブジェクトが「弱い」参照を持つ特別な種類のセットです。これは、WeakSet に格納されているオブジェクトへの参照が他にない場合、そのオブジェクトをガベージ コレクションできることを意味します。通常の Set とは異なり、WeakSet はオブジェクトを要素としてのみ受け入れ、それらのオブジェクトは弱く保持されます。これにより、WeakSet は、オブジェクトを追跡したいが、他の場所で不要になったオブジェクトがガベージ コレクションされるのを防ぎたくない場合に便利です。

WeakSet の特徴:

1 オブジェクトのみ: WeakSet には、数値や文字列などのプリミティブ値ではなく、オブジェクトのみを含めることができます。

2 弱い参照: WeakSet 内のオブジェクトへの参照は弱いです。つまり、オブジェクトへの参照が他にない場合、そのオブジェクトはガベージ コレクションされる可能性があります。

3 サイズなしプロパティ: WeakSet は要素の数を公開しないため、WeakSet のサイズを取得できません。

4. 反復なし: WeakSet には forEach のようなメソッドや Set のような反復子がないため、反復することはできません。

基本的な使い方:

let weakset = new WeakSet();

let obj1 = {name: "object1"};
let obj2 = {name: "object2"};

weakset.add(obj1);
weakset.add(obj2);

console.log(weakset.has(obj1)); // true
console.log(weakset.has(obj2)); // true

obj1 = null; // obj1 is eligible for garbage collection

console.log(weakset.has(obj1)); // false

面白いサンプル:

WeakSet がスパイのための秘密クラブのようなシナリオを想像してみましょう。このクラブは非常に秘密主義で、スパイが活動を停止すると、跡形もなく消えてしまいます。クラブは会員数を決して管理しておらず、現在クラブに誰がいるかのリストを入手することはできません。クラブに特定のスパイがいるかどうかのみを尋ねることができます。

// The Secret Spy Club
class Spy {
    constructor(name) {
        this.name = name;
    }
    introduce() {
        console.log(`Hi, I am Agent ${this.name}`);
    }
}

let spy1 = new Spy("007");
let spy2 = new Spy("008");

let spyClub = new WeakSet();

// Adding spies to the secret club
spyClub.add(spy1);
spyClub.add(spy2);

console.log(spyClub.has(spy1)); // true
console.log(spyClub.has(spy2)); // true

spy1.introduce(); // Hi, I am Agent 007
spy2.introduce(); // Hi, I am Agent 008

// Spy 007 finishes his mission and disappears
spy1 = null; // Now Agent 007 is no longer in the club and is eligible for garbage collection

// Let's see if spies are still in the club
console.log(spyClub.has(spy1)); // false, because Agent 007 is no longer referenced
console.log(spyClub.has(spy2)); // true, because Agent 008 is still active

// Agent 008 finishes his mission too
spy2 = null; // Now Agent 008 is also eligible for garbage collection

// Checking club members again
console.log(spyClub.has(spy2)); // false, no active spies left

この面白い例では、WeakSet は秘密スパイ クラブであり、スパイはオブジェクトです。スパイ (オブジェクト) が任務を完了し、他にそれらへの参照がなくなると、オブジェクトがコード内の他の場所で参照されなくなったときに WeakSet から削除されるのと同じように、痕跡もなく消えます (ガベージ コレクションが取得されます)。

以上がJSのWeakSet?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。