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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:19