首页 > 解决方案 > JavaScript:如何在类外的映射器中使用 new 关键字初始化类对象?

问题描述

我有一个带有一些测试的简单控制台应用程序。我正在测试的只是检查游戏是否从级别 1 开始。如果当前级别是 2,下一个应该是 3 等等。以下代码工作正常,但我想将gameMapper函数移出到它自己的文件中并在其中导入Game.js. _

游戏.js

export default class Game {
  constructor(level) {
    this.level = level;
  }

  static start = () => new Game(1);

  getNextLevel = () => gameMapper.find((g) => g.level === this.level).nextLevel;
}

const gameMapper = [
  { level: 1, nextLevel: new Game(2) },
  { level: 2, nextLevel: new Game(3) },
  { level: 3, nextLevel: new Game(4) },
];

示例.test.js

import Game from '../src/Game';

describe('Test Game levels', () => {
  test('Game should start from level 1', () => {
    const game = Game.start();
    expect(game.level).toBe(1);
  });

  test('When game level is 2, the next level should be 3', () => {
    const game = Game.start().getNextLevel().getNextLevel();
    expect(game.level).toBe(3);
  });
});

上面的代码工作得很好。我尝试了以下解决方案,但它们似乎对我不起作用。如果有人知道任何更好的解决方案,请告诉我。

gameMapper.js 文件

import Game from './Game';

export const gameMapper = [
  { level: 1, nextLevel: Game.init(2) },
  { level: 2, nextLevel: Game.init(3) },
  { level: 3, nextLevel: Game.init(4) },
];

更新了 Game.js 文件

import { gameMapper } from './gameMapper';

export default class Game {
  static init = (level) => new Game(level);

  getNextLevel = () => gameMapper.find((g) => g.level === this.level).nextLevel;

}

当我执行上述操作时,我将 gameMapper 移出并将其导入到Game.js文件中,我在gameMapper.js.

TypeError: Cannot read properties of undefined (reading 'init'){ level: 1, nextLevel: Game.init(2) }

我希望当我移出映射器时测试仍然可以通过。

谢谢大家宝贵的时间:)

标签: javascript

解决方案


推荐阅读