Symbol.dispose

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

Symbol.dispose 静态数据属性表示 知名 Symbol Symbol.disposeusing 声明会在变量离开作用域时查找变量初始化器上的此 Symbol,并调用对应的方法。

知名 Symbol Symbol.dispose

Symbol.dispose 的属性特性
可写
可枚举
可配置

描述

如果一个对象具有 [Symbol.dispose]() 方法,则该对象是可处置的。该方法应遵循以下语义:

  • 调用此方法表示调用者不再打算继续使用该对象。此方法应执行任何必要的逻辑来显式清理资源,包括但不限于文件系统句柄、流、宿主对象等。
  • 当从该方法中抛出异常时,通常意味着资源未能被显式释放。
  • 如果对同一对象调用该函数一次以上,函数不应抛出异常。但是,此要求并未强制执行。

此方法不应返回 Promise,因为 [Symbol.dispose]() 返回的 Promise 不会被 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

规范

规范
ECMAScript 异步显式资源管理
# 表格-1

浏览器兼容性

另见