NodeJS模块导出问题:如何实现数组求和的链式调用
如何实现NodeJS中的model函数及add方法求和功能
你希望实现如下功能,运行主代码后输出6(即数组[1,2,3]的求和结果):
const myFile = require('./myFile') const schematic = myFile.model('Name', [1,2,3]) const addValues = schematic.add() console.log(addValues) // 期望输出6
当前代码的核心问题
你的myFile.js存在两个关键错误:
- 箭头函数的
this指向异常:箭头函数没有自身的this上下文,return this返回的是模块全局的this(并非你需要的自定义对象)。 - 方法挂载位置错误:你直接给
module.exports.model函数添加add方法,而非给model调用后返回的对象绑定方法,导致schematic.add()会提示方法不存在。
方案1:工厂函数(新手友好)
通过工厂函数返回包含add方法的对象,利用闭包保存传入的数组:
// myFile.js module.exports.model = (name, values) => { return { add: () => { // 使用reduce方法对数组求和,初始值设为0避免空数组报错 return values.reduce((total, num) => total + num, 0); } }; };
代码说明
model函数接收参数后,返回一个带有add方法的新对象。add方法通过闭包直接访问外层的values参数,无需额外存储。reduce方法是数组求和的高效方式,第二个参数0为求和初始值,兼容空数组场景。
方案2:类(面向对象风格)
如果习惯面向对象写法,可以用类实现:
// myFile.js class Schematic { constructor(name, values) { // 将参数保存为实例属性 this.name = name; this.values = values; } // 定义实例求和方法 add() { return this.values.reduce((total, num) => total + num, 0); } } // 暴露model函数,用于创建Schematic实例 module.exports.model = (name, values) => new Schematic(name, values);
代码说明
- 定义
Schematic类,在构造函数中初始化实例的name和values属性。 add作为实例方法,通过this.values访问当前实例的数组并求和。model函数作为工厂,负责创建并返回Schematic的实例。
两种方案都能让你的主代码正常运行,控制台输出6。
内容的提问来源于stack exchange,提问作者iVizWiz
相关产品推荐
相关产品推荐

