如果我有3个js文件如下:
file1.js
this.functionName = function(params) { //do something};
file2.js
function fucntionName(params) {
//do something
};
module.exports = {
functionName
};
然后在第三个js文件中,我可以要求两个文件的对象并调用它们中定义的两个函数;例如,如果我在index.js中调用它们
let file1 = require('/file1');
let file2 = require('/file2');
file1.functionName('some param');
file2.functionName('some param');
两者之间有什么区别,哪个更受欢迎?
答案 0 :(得分:1)
如果您正在使用带有Babel的ES6,那么使用export
语法会更加清晰。也就是说,如果你想直接引用这个函数,就像这样:
const fName = function(){
/* do stuff here */
}
export default fName;
或者,如果您想导出多个功能而无需在module.exports
中手动分配它们,您可以这样做:
export const fName2 = function(){ /* do stuff */ }
那么你可以直接导入第一个,然后通过解构导入第二个:
import fName from './file1';
import { fName2 } from './file2';
希望这是有帮助的
答案 1 :(得分:0)
第一个 - 是
引自this帖子:
因此2可能看起来相同。但是,他们不是 - 在你的第二个例子中,你正在改变" module.exports"引用的对象。这是危险的,因为您之前对" module.exports"引用的原始对象进行了任何修改。 在同一模块中(感谢Kevin让我知道这不清楚)在需要时将不再可用。将来,如果有人想要使用其他方法添加一个函数,并在重新分配之前使其可用,他们可能会发现自己无法访问它,同时拥有一些正确的代码。
另外 - 通过让自己相信第二种方法具有相同的效果,你可能会想做类似的事情:
module.exports = {
functionName1
};
// code, code, code
module.exports = {
functionName2
};
这显然会剥夺您对原始functionName1
方法的访问权限。
当然,您可以同时将这两个功能添加到新对象中,但是如果它们在您的范围内不可用(例如,它们已经在另一个功能中定义)会怎样?在功能可用时,您仍然必须使用第一种方法。
这两种方法显然都有效。我推荐第一个,因为对我而言,它更清晰,更不容易出错。
<强>然而强>
由于this
取决于上下文,因此将它们全部放在一起并坚持module.exports
。你最终会得到类似的东西:
module.exports.functionName = function(params) {
//do something
};
或
function mySimpleFunction(params){
//do something
}
module.exports.functionName = mySimpleFunction;
(如果您关注的是关联声明的函数)