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

对象字面量中的自引用问题:如何计算每周两场比赛的平均得分

解决方案

对象字面量初始化阶段无法直接自引用属性,因为此时对象实例还未完全创建,this指向的是外层作用域而非当前对象,你可以通过以下三种方式实现需求:

方法1:使用 getter 实现动态计算(最推荐)

通过 getter 定义average属性,访问属性时自动触发计算,此时this会指向当前周的对象实例,可以直接读取同对象下的其他属性:

var scores = {
  week1: {
    game1: 55,
    game2: 62,
    get average() {
      return (this.game1 + this.game2) / 2
    }
  },
  week2: {
    game1: 71,
    game2: 67,
    get average() {
      return (this.game1 + this.game2) / 2
    }
  }
};

// 调用方式和普通属性完全一致,scores.week1.average 直接返回 58.5
  • 优势:后续修改game1/game2的数值时,average会自动更新,不需要手动重新计算

方法2:分步骤初始化生成静态属性

如果你需要average是固定的静态数值而非动态计算属性,可以拆分对象初始化步骤:

// 第一步先定义每周比赛得分
var scores = {
  week1: { game1: 55, game2: 62 },
  week2: { game1: 71, game2: 67 }
};
// 第二步遍历计算每个周的平均得分
for (const week in scores) {
  scores[week].average = (scores[week].game1 + scores[week].game2) / 2;
}
  • 优势:average是普通数值属性,JSON序列化时会正常包含在内(getter默认不会被序列化输出)

方法3:工厂函数批量生成周对象

如果周数较多,可以通过工厂函数减少重复代码:

function createWeekScores(game1, game2) {
  return {
    game1,
    game2,
    average: (game1 + game2) / 2
  }
}

var scores = {
  week1: createWeekScores(55, 62),
  week2: createWeekScores(71, 67)
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:45:01