Extensions S1
中文标题:扩展
提案概览
- 阶段: Stage 1
- 状态: 进行中
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
该提案引入了 :: 运算符,用于在对象上定义和使用扩展方法、getter 和 setter,而不会污染全局命名空间。它旨在通过允许临时扩展和复用内置原型来提高代码可读性,语法如 obj::method() 和 obj::ext:name。` 相同。提案包含实验性实现和设计文档。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
扩展与 :: 运算符
提案状态
这是一个处于第 1 阶段的 ECMAScript(JavaScript)提案。
注意:该提案可以被视为旧 bind 运算符提案 中“虚拟方法”部分的重塑,参见 https://github.com/tc39/proposal-bind-operator/issues/56。
简单示例
临时扩展方法和访问器的示例
大致等于:
使用构造函数或命名空间对象作为扩展的示例
大致等于:
旧 bind 运算符提案的变更
- 保留
obj::foo()语法用于扩展方法 - 将
obj::foo重新用于扩展 getter,并添加obj::foo =作为扩展 setter - 为临时扩展方法和访问器提供单独的命名空间,不污染普通绑定名称
- 添加
obj::ext:name语法 - 将运算符优先级改为与
.相同 - 移除
::obj.foo(用例可以通过自定义扩展加库或其他提案解决)