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

如何为技能等级0-10创建同结构不同值的属性集,避免重复代码?

技能等级配置实现方案

一、避免重复复制,快速生成0-10级统一结构

1. 工厂函数方案(最常用)

先写一个生成单等级配置的函数,再循环创建0到10级的配置,每个等级都是独立对象,互不影响:

// 生成单个等级配置的工厂函数
function createLevelConfig() {
  return {
    skillPoints: 0,
    mp: 0,
    attackPower: 0,
    effect: 0,
    requiredLevel: 0,
    castTime: {
      fixed: 0,
      variable: 0,
      total: 0
    },
    cooldown: {
      fixed: 0,
      variable: 0,
      total: 0,
    },
    duration: 0,
    attackEnemyNumber: 0,
    description: ''
  };
}

// 初始化完整技能配置
const skillProps = {
  name: 'N/A',
  skillType: 'N/A',
  level: {},
  weaponType: '',
  posX: 0,
  posY: 0
};

// 循环生成0-10级的配置
for (let i = 0; i <= 10; i++) {
  skillProps.level[i] = createLevelConfig();
}

2. 类封装方案(适合后续扩展逻辑)

如果之后需要给等级配置加计算逻辑(比如自动算总施法时间),用类更方便:

class LevelConfig {
  constructor() {
    this.skillPoints = 0;
    this.mp = 0;
    this.attackPower = 0;
    this.effect = 0;
    this.requiredLevel = 0;
    this.castTime = {
      fixed: 0,
      variable: 0,
      total: 0
    };
    this.cooldown = {
      fixed: 0,
      variable: 0,
      total: 0,
    };
    this.duration = 0;
    this.attackEnemyNumber = 0;
    this.description = '';
  }

  // 示例:自动计算总施法时间
  updateTotalCastTime() {
    this.castTime.total = this.castTime.fixed + this.castTime.variable;
  }
}

// 初始化技能配置
const skillProps = {
  name: 'N/A',
  skillType: 'N/A',
  level: {},
  weaponType: '',
  posX: 0,
  posY: 0
};

for (let i = 0; i <= 10; i++) {
  skillProps.level[i] = new LevelConfig();
}

3. 模板+深拷贝方案(简洁写法)

先定义基础模板,再通过深拷贝生成每个等级的配置,避免嵌套对象共享引用:

// 基础等级模板
const levelTemplate = {
  skillPoints: 0,
  mp: 0,
  attackPower: 0,
  effect: 0,
  requiredLevel: 0,
  castTime: {
    fixed: 0,
    variable: 0,
    total: 0
  },
  cooldown: {
    fixed: 0,
    variable: 0,
    total: 0,
  },
  duration: 0,
  attackEnemyNumber: 0,
  description: ''
};

// 深拷贝函数,确保嵌套对象独立
function deepCopy(obj) {
  return JSON.parse(JSON.stringify(obj));
}

// 初始化技能配置
const skillProps = {
  name: 'N/A',
  skillType: 'N/A',
  level: {},
  weaponType: '',
  posX: 0,
  posY: 0
};

for (let i = 0; i <= 10; i++) {
  skillProps.level[i] = deepCopy(levelTemplate);
}

二、常量对象是否合适?

完全合适:

  • const只是禁止变量被重新赋值,但对象内部的属性(比如skillProps.level[1].attackPower)依然可以自由修改,刚好满足你“各等级属性独立调整”的需求。
  • 如果你的技能配置是作为基础模板使用,不需要整体替换,用const定义更符合语义,避免误操作覆盖整个配置对象。
  • 要是后续需要生成多个不同技能的配置,把上述逻辑封装成函数/类,每次调用生成新对象即可,不会有引用冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:57:16