如何将包含外部函数调用的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
相关产品推荐
相关产品推荐

