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

使用new调用require引入的函数未返回计算值,反而输出“add {}”

问题出在调用方式和参数类型上,我来帮你捋清楚!

首先看你的代码,add.js里导出的是一个普通的计算函数,但你在request.js里用了new关键字去调用它——这就是问题的核心!

为啥会输出add {}?

咱们先搞懂new关键字的作用:它是用来创建构造函数的实例对象的,不是用来调用普通函数的。当你用new调用add函数时:

  1. JS会自动生成一个空对象,这个对象和add函数的原型挂钩
  2. 函数内部的this指向这个空对象
  3. 因为你的函数返回的是数字(原始值),JS会直接忽略这个返回值,默认把刚才生成的空对象返回给你
    所以你看到的add {}就是这个自动生成的空实例,自然拿不到预期的10。

另外还有个小细节:你传的参数是字符串'5',就算调用方式对了,直接相加也会变成字符串拼接得到'55',而不是数字10,这个也要注意。

修正后的代码(推荐写法)

直接去掉new,把它当作普通函数调用,同时把参数转为数字(或者直接传数字):

// request.js
// 注意路径要写对,如果两个文件在同一目录,要加./
var add = require("./add.js")

// 两种写法都可以:
// 写法1:把字符串参数转成数字
var result = add(Number('5'), Number('5'))
// 写法2:直接传入数字
var result = add(5, 5)

console.log(result) // 这下就能输出10啦!

额外提醒

如果你的函数就是用来做简单数值计算的,完全没必要用构造函数的方式调用,普通函数调用就足够了。构造函数一般是用来创建具有特定属性和方法的对象实例时才用的~

内容的提问来源于stack exchange,提问作者j.doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:11