Symbol.dispose
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Symbol.dispose
は、静的データプロパティーで、ウェルノウンシンボルである Symbol.dispose
を表します。using
宣言が、変数を初期化するオブジェクトにおけるこのシンボルを調べることで、変数がスコープ外になる際に呼び出すメソッドを取得します。
値
ウェルノウンシンボル Symbol.dispose
です。
Symbol.dispose のプロパティ属性 | |
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
解説
処分可能な(disposable)オブジェクトとは、 [Symbol.dispose]()
メソッドを備えたオブジェクトです。このメソッドは、以下のようなセマンティクスを持つことが期待されます:
- このメソッドを呼び出すことで、呼び出し元がこのオブジェクトの使用を継続する意図がないことを、処分可能なオブジェクトに伝えます。このメソッドは、ファイルシステムハンドル、ストリーム、ホストオブジェクトなど、リソースを明示的にクリーンアップするために必要なロジックを実行する必要があります。
- このメソッドが例外をスローした場合、通常はリソースを解放できなかったことを意味します。
- 同じオブジェクトにおいて2回以上呼び出された場合でも、メソッドは例外をスローするべきではありません。ただし、この要件は強制ではありません。
このメソッドはプロミスを返すべきではありません。なぜなら、[Symbol.dispose]()
が返すプロミスは await using
によって待機されないからです。非同期の処分可能オブジェクトを宣言するには、Symbol.asyncDispose
を使用してください。
例
>ユーザー定義の処分可能オブジェクト
[Symbol.dispose]
により、カスタムの処分可能オブジェクトを作成できます。詳細については、using
を参照してください。
js
class Disposable {
constructor() {
this.disposed = false;
}
[Symbol.dispose]() {
this.disposed = true;
}
get isDisposed() {
return this.disposed;
}
}
const resource = new Disposable();
{
using resourceUsed = resource;
console.log(resource.isDisposed); // false
}
console.log(resource.isDisposed); // true
仕様書
Specification |
---|
ECMAScript Async Explicit Resource Management> # table-1> |
ブラウザーの互換性
Loading…