javascript - 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 函数移出到它自己的文件中。我收到这个错误
TypeError: _Game.default is not a constructor
- 然后我将该
init
函数添加到Game
需要 level 参数的类中,并使用该级别初始化 Game 类。但我得到另一个错误,如下所述。
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) }
我希望当我移出映射器时测试仍然可以通过。
谢谢大家宝贵的时间:)
解决方案
推荐阅读
- java - 如何使用 apache pdfbox api 将 PDF 的字节数组转换为 Java 中 jpg 图像的字节数组?
- pandas - 遍历一些 .csv 并覆盖它们
- javascript - 如何使用 vuejs 从多个元素中定位特定单击的元素
- javascript - 运行节点时找不到模块“请求”
- progressive-web-apps - 创建 PWA - Chrome 的主页图标有效,但 Firefox 无效
- r - 在 Shiny 中与 selectize.js 选项交互
- apache-spark - 初始作业未接受任何资源与 Java Heap Space Standalone Apache Spark
- api - Instagram 按名称 API 查找 Hashtag
- regex - 如何从 atom 编辑器的每一行中删除前 23 个字符?
- excel - 在两个不同的单元格中查找相同的字符串,Excel VBA