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

如何将包含外部函数调用的JavaScript类导出至其他文件?

问题解决:Movie类导出后无法调用工具函数的问题

错误根源

把Movie类移到单独文件后,类的displayMovieDetails方法中调用的func.toHoursAndMinutes在新文件的作用域里未定义——原来主文件里已经导入了func对象,但单独的类文件没有导入这个依赖,导致运行时找不到变量。

修复步骤

1. 确保工具函数文件(appFunctions.js)的导出正确

module.exports = {
  toHoursAndMinutes: function(totalMinutes){
    const minutes = totalMinutes % 60;
    const hours = Math.floor(totalMinutes / 60);
    // 完美整小时只显示小时,否则显示小时+分钟
    return `${hours}h${minutes > 0 ? ` ${minutes}mins` : ''}`;
  }
};

2. 重构Movie类文件(Movie.js)

在类文件中先导入工具函数依赖,再定义类,最后导出类:

// 导入工具函数对象
const func = require('./appFunctions');

// 类名首字母大写符合JS规范
class Movie {
  constructor(name, genre, runTime, releaseDate, rating) {
    this.name = name;
    this.genre = genre;
    this.runTime = runTime;
    this.releaseDate = releaseDate;
    this.rating = rating;
  }

  displayMovieDetails() {
    console.log(`\n\nName\t\t: ${this.name}\nGenre\t\t: ${this.genre}\nRunning Time\t: ${func.toHoursAndMinutes(this.runTime)}\nRelease Date\t: ${this.releaseDate}\nRating\t\t: ${this.rating[0] === 0 ? 0 : (this.rating[1]/this.rating[0]).toFixed(1)} (${this.rating[0]} voters)\n`);
  }
}

// 单独导出Movie类
module.exports = Movie;

3. 主文件(main.js)中导入并使用Movie类

const Movie = require('./Movie');

// 示例:创建电影实例并调用方法
const inception = new Movie(
  '盗梦空间',
  '科幻',
  148,
  '2010-07-16',
  [1000000, 8800000]
);
inception.displayMovieDetails();

可选优化:直接导入指定函数

如果不想依赖整个func对象,可以解构导入工具函数,让代码更简洁:

// Movie.js中改为解构导入
const { toHoursAndMinutes } = require('./appFunctions');

// 方法中直接调用
displayMovieDetails() {
  console.log(`\n\nName\t\t: ${this.name}\nGenre\t\t: ${this.genre}\nRunning Time\t: ${toHoursAndMinutes(this.runTime)}\nRelease Date\t: ${this.releaseDate}\nRating\t\t: ${this.rating[0] === 0 ? 0 : (this.rating[1]/this.rating[0]).toFixed(1)} (${this.rating[0]} voters)\n`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:43:16