Node.js TypeError报错:func_pTutor不是函数,模块调用问题求助
问题分析与解决方案:无法访问内部函数
func_pTutor 咱们先说说你遇到的错误原因:你把func_pTutor定义在了NodeTutorial函数的内部作用域里,它属于这个函数的私有局部函数,并没有被暴露到外部能访问的位置。当你尝试用localTutor.NodeTutorial.func_pTutor()调用它时,Node.js找不到这个方法,自然就抛出了类型错误。
下面我给你两种修正方案,你可以根据自己的需求选择:
方案一:将func_pTutor作为NodeTutorial函数的静态方法挂载
这种方式会把func_pTutor绑定到NodeTutorial这个函数对象上,保持你原本的调用结构不变:
修改后的NodeTutorial.js
var Tutor = require('./Tutorial.js'); // 先定义NodeTutorial主函数 function NodeTutorial() { console.log("22"); // 如果你需要在NodeTutorial内部调用func_pTutor,直接写func_pTutor()即可 } // 把func_pTutor挂载到NodeTutorial函数上,让外部能访问 NodeTutorial.func_pTutor = function() { var PTutor = Tutor; PTutor.tutorial(); } // 导出NodeTutorial函数 module.exports.NodeTutorial = NodeTutorial;
app.js保持不变
var localTutor = require('./NodeTutorial.js'); localTutor.NodeTutorial(); // 输出:22 localTutor.NodeTutorial.func_pTutor(); // 输出:11
方案二:将func_pTutor作为模块的独立导出项
如果你不需要把func_pTutor和NodeTutorial绑定在一起,也可以直接把它作为模块的顶级导出:
修改后的NodeTutorial.js
var Tutor = require('./Tutorial.js'); exports.NodeTutorial = function() { console.log("22"); } // 直接导出func_pTutor exports.func_pTutor = function() { var PTutor = Tutor; PTutor.tutorial(); }
对应的app.js调用方式
var localTutor = require('./NodeTutorial.js'); localTutor.NodeTutorial(); // 输出:22 localTutor.func_pTutor(); // 输出:11
核心错误总结
原来的代码里,func_pTutor是NodeTutorial函数内部的局部变量,只有在NodeTutorial函数执行时才能被内部访问,外部根本找不到它。要让外部能调用,必须把它挂载到模块导出的对象上,或者绑定到目标函数对象的属性上才行。
内容的提问来源于stack exchange,提问作者Sukeesh
相关产品推荐
相关产品推荐

