このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

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

ブラウザーの互換性

関連情報