1. ホーム
  2. javascript

[解決済み] ECMAScript 6 のクラスデストラクタ

2022-03-11 12:47:26

質問

ECMAScript 6 にコンストラクタがあるのは知っていますが、ECMAScript 6 にデストラクタというものがあるのでしょうか?

例えば、コンストラクタでオブジェクトのメソッドのいくつかをイベントリスナーとして登録した場合、オブジェクトが削除されたときにそれらを削除したいのです。

1つの解決策は、「Security(セキュリティ)」と名付けた destructor メソッドを、このような動作が必要なすべてのクラスに対して手動で呼び出します。こうすることで、イベントハンドラへの参照が削除され、私のオブジェクトは本当にガベージコレクションの準備ができることになる。そうしないと、これらのメソッドのせいでメモリ上に残ってしまいます。

しかし、ECMAScript 6 には、オブジェクトがガベージコレクションされる直前に呼び出されるようなネイティブなものがあればいいなと考えていました。

もしそのような仕組みがないのであれば、このような問題に対するパターン/慣習はどのようなものでしょうか?

解決方法は?

<ブロッククオート

ECMAScript 6 にはデストラクタというものがあるのですか?

EcmaScript 6 はガベージコレクションのセマンティクスをまったく指定していません。 [1] そのため、quot;destruction" のようなものもありません。

コンストラクタでオブジェクトのメソッドのいくつかをイベントリスナーとして登録した場合、オブジェクトが削除されたときにそれらを削除したい。

デストラクタは、ここでは役に立ちません。イベントリスナー自体はまだあなたのオブジェクトを参照しているので、登録が解除される前にガベージコレクトされることはないでしょう。
あなたが実際に探しているのは、リスナーをライブルートオブジェクトとしてマークすることなく、リスナーを登録する方法です。(そのような機能については、お近くのイベントソースメーカーにお尋ねください)。

<サブ 1): さて、冒頭の仕様で WeakMap WeakSet オブジェクトを作成します。しかし、真の弱参照はまだパイプラインにあります [1] [2] .