使用new调用require引入的函数未返回计算值,反而输出“add {}”
问题出在调用方式和参数类型上,我来帮你捋清楚!
首先看你的代码,add.js里导出的是一个普通的计算函数,但你在request.js里用了new关键字去调用它——这就是问题的核心!
为啥会输出add {}?
咱们先搞懂new关键字的作用:它是用来创建构造函数的实例对象的,不是用来调用普通函数的。当你用new调用add函数时:
- JS会自动生成一个空对象,这个对象和
add函数的原型挂钩 - 函数内部的
this指向这个空对象 - 因为你的函数返回的是数字(原始值),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
相关产品推荐
相关产品推荐

