Node.js中访问对象属性与方法时出现Undefined及函数调用错误
解决Node.js中对象属性undefined和方法调用TypeError的问题
嘿,我懂你作为Node.js新手碰到这个问题的头疼!咱们来一步步拆解问题,把它搞定。
问题根源
你在导出对象时,把dice挂载到了exports.diceObjectName属性上,但导入时直接把整个模块赋值给了dice变量。这时候你拿到的dice其实是一个包含diceObjectName属性的模块容器对象,而非你定义的那个骰子对象本身——所以访问dice.roll会提示不是函数,dice.size也会返回undefined。
两种解决方法
方法1:修改导出方式(更简洁推荐)
直接把模块的导出对象设置为你的dice对象,这样导入时就能直接拿到目标对象:
// 对象文件 dice.js var dice = { size: 4, count:3, roll:function(){ var result = Math.ceil(this.size * Math.random()); return result; } }; // 直接导出dice对象 module.exports = dice;
然后程序文件就能正常运行了:
// 程序文件 var dice = require("./dice"); console.log(dice); // 现在会输出你定义的完整dice对象 console.log(dice.roll()); // 成功调用roll方法
方法2:修改导入后的访问路径
如果不想改动导出代码,那就在导入后通过diceObjectName属性拿到真正的骰子对象:
// 程序文件 var diceModule = require("./dice"); var dice = diceModule.diceObjectName; // 提取出目标对象 console.log(dice.size); // 输出4 console.log(dice.roll()); // 正常执行方法
小补充
在Node.js里,exports是module.exports的一个引用。如果直接给exports赋值新对象,不会改变模块的最终导出结果,必须用module.exports或者exports = module.exports = ...来覆盖整个导出对象。
内容的提问来源于stack exchange,提问作者Faisal Shahid
相关产品推荐
相关产品推荐

