node.js中的不同module.exports模式

海军蓝

假设我们正在使用node.js创建简单的应用程序并进行表达(Note App)。我们要组织代码并将所有控制器放在单独的文件夹中。因此我们创建一个文件夹并index.js在其中创建然后将控制器js文件添加到此文件夹。然后初始化的主入口点的所有控制器index.js,然后使用requireserver.js访问我们的控制器。(我不喜欢大,笨重,杂乱server.js的文件,在这一切的逻辑棒!)

所有这些示例代码都可以正常工作,但是我无法理解这些代码块之间的区别。

1。

module.exports.init = function(app){
    console.log("notes controller init.");
};

2。

function init(app){
    console.log("notes controller init.");
};
module.exports.init = init;

3。

(function (notesController){
    notesController.init = function(app){
        console.log("notes controller init.");
    };
})(module.exports);

4。

module.exports = {
    init: function(app){
        console.log("notes controller init.");
        }
    }

这些函数的性能或加载是否有所不同,或者JavaScript中有些神秘的东西,或者只是编码风格的多样性?

谢谢。

PS。

我是曾经讨厌JavaScript的后端C#开发人员!但是由于Node.js,我试图理解这种语言的本质。我在JavaScript上搜索了很多有关模块,导出,原型和...的信息,但是找不到答案。

jfriend00

选项#1声明一个未命名的函数,并将其直接分配给module.exports.init

选项#2创建一个本地命名的函数init,然后将其分配给module.exports.init就所module.exports.init关注的而言,#1和#2之间完全没有功能差异。#2创建了本地符号init,可以将其用作快捷方式在本地执行相同的功能。但是,module.exports.init()使用四个选项中的任何一个,执行的结果将完全相同。

选项#3创建一个本地IIFE函数作用域,该作用域使您init可以使用函数可以使用的私有变量,这些私有变量将在方法的一次调用到下一次调用之间存在,甚至在模块内是私有的(模块的其他部分不能甚至访问它们)。您无需声明任何私有变量,但可以声明。除此之外,module.exports.init因为module.exports.init在所有三个选项中都分配了完全相同的功能引用,所以再次执行与之前的两个选项没有什么不同

选项#4定义一个新export.modules对象,然后在该对象中静态声明一个方法。这是定义所有导出方法的一种有用且紧凑的方法(这是一种常见的设计模式),但是我个人仅在声明一个导出方法时就不会使用它,因为选项#1非常简单。

它们之间的任何性能差异都只会在初始化期间出现,并且可能很小,以致于难以测量或难以找到它们。


最佳选择完全是意见。我个人更喜欢遵循良好编码实践并能完成工作的最简单解决方案。对我来说,这将是选项#1,因为似乎没有理由在init本地进行定义(选项#2),也没有理由为专用符号使用IIFE(选项#3)。

因此,我宁愿不要创建一个未使用或不需要的命名函数(选项2),也不宁愿声明一个不用于任何目的的IIFE(选项3)。

如果声明多个导出方法,我通常会自己使用选项#4,因为这样做是最紧凑的语法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章