You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JS对象中可用c(){}简写定义方法而非c:function(){}?

对象方法简写语法的由来与原理

这种c(){}的写法是ES6(ECMAScript 2015)为对象字面量新增的方法简写语法,目的是简化对象内函数属性的定义,让代码更简洁直观。

语法等价性(大部分场景)

在不涉及super关键字的情况下,它和传统的c: function(){}写法几乎等价:

// 简写形式
const object1 = {
  a: 'somestring',
  b: 42,
  c(){},
};

// 等价于(无super时)
const object1 = {
  a: 'somestring',
  b: 42,
  c: function(){},
};

核心差异与设计意图

不过两者存在一个关键区别:方法简写定义的函数会拥有[[HomeObject]]内部属性,指向当前定义它的对象。这一设计是为了支持ES6的super关键字——当你在方法中使用super时,JS引擎会通过[[HomeObject]]找到该对象的原型,进而调用原型上的同名方法。

比如:

const proto = {
  foo() { console.log('proto foo'); }
};

const obj = {
  __proto__: proto,
  // 方法简写,有[[HomeObject]]
  foo() {
    super.foo(); // 能正确调用proto.foo()
  }
};

// 而如果用传统写法:
const obj2 = {
  __proto__: proto,
  foo: function() {
    super.foo(); // 报错!因为普通函数没有[[HomeObject]],无法识别super
  }
};

额外优势

  • 代码更简洁,减少冗余的function关键字和冒号,符合现代JS的简洁风格
  • 明确区分对象的数据属性和方法属性,语义更清晰

内容的提问来源于stack exchange,提问作者Johnny Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:42:04