ES6支持用方括号包裹表达式定义计算属性名,实现动态键名与方法绑定;可结合变量、模板字符串、Symbol等生成方法名,但仅在对象初始化时求值一次,且不支持getter/setter简写语法中直接使用。

ES6 允许在对象字面量中使用方括号 [] 包裹表达式来定义计算属性名(Computed Property Names),这不仅能用于动态键名,还能结合函数表达式实现“动态方法绑定”——即在创建对象时,根据变量、条件或运行时值决定方法名。
基本语法:用表达式生成方法名
计算属性名本质是把一个 JavaScript 表达式的结果作为属性键。只要表达式返回字符串(或可转为字符串的值),就能用作方法名:
const methodName = 'fetchData';
const api = {
[methodName]() {
return 'loaded from server';
}
};
api.fetchData(); // 'loaded from server'
绑定带参数的动态方法
计算属性名本身不改变函数行为,它只影响键名。你可以照常定义带参数、返回值、this 绑定的函数:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 方法体内可访问闭包变量或 this(取决于调用方式)
- 支持箭头函数(注意 this 绑定差异)
- 可组合模板字符串生成命名,例如带前缀/后缀的方法
const prefix = 'user';
const action = 'get';
const service = {
[`${prefix}${action.toUpperCase()}`](id) {
return { id, type: 'user' };
}
};
service.getUser(101); // { id: 101, type: 'user' }
结合 Symbol 或动态逻辑生成唯一方法名
当需要避免命名冲突或基于运行时逻辑生成方法时,可搭配 Symbol、Math.random() 或条件表达式:
const id = Symbol('handler');
const handler = {
[id](https://www.php.cn/link/771a83c3aab78a8115be5e2e93d2b534) {
console.log('Custom handler:', https://www.php.cn/link/771a83c3aab78a8115be5e2e93d2b534);
}
};
handler[id]('hello'); // 'Custom handler: hello'
<p>// 或用条件判断
const mode = 'debug';
const logger = {
<a href="https://www.php.cn/link/771a83c3aab78a8115be5e2e93d2b534"><code>log${mode === 'debug' ? 'Debug' : 'Error'}</code></a> {
console<a href="https://www.php.cn/link/771a83c3aab78a8115be5e2e93d2b534">mode === 'debug' ? 'info' : 'error'</a>;
}
};
logger.logDebug('test'); // 输出 info
注意事项与常见误区
计算属性名仅在对象字面量**初始化时求值一次**,不支持后续自动更新;且不能用于 getter/setter 的简写语法中直接嵌套(需显式写 get/set):
- ❌ 错误:{ get [key]() {} } —— 语法报错,必须写成 { get [key]() { ... } }
- ✅ 正确:{ ['get' + type]: function() {} }
- ⚠️ 若表达式结果不是字符串或 symbol,会自动 toString(),如对象变成 '[object Object]'

















