导出对象与函数NodeJs

时间:2014-12-20 14:40:10

标签: javascript node.js function object

导出对象{}与导出功能

我正在开发一个练习应用程序,我遇到了一个问题我什么时候需要导出对象{}而不是函数类?

情景示例:

我正在使用对象样式构建简单身份验证module

// file auth.js
module.exports = {

    login: function() {
       // code login
    },

    logout: function() {
      // code logout
    },

    register: function() {
      // code register
    }
}

我在这里使用匿名函数样式

module.exports = function() {

        return {
            login: function() {
               // code login
            },

            logout: function() {
              // code logout
            },

            register: function() {
              // code register
            }
         }
    }

需要

当我想要要求这个模块时,我就这么做:

var auth = require('auth');

auth.login(); // trigger login function via object
auth().login() // trigger login function via function

它将适用于这两种方法,但我很困惑,选择哪种更合适,为什么。

问题

  • 您如何理解模块的设计,何时适合导出,对象匿名函数命名函数实例化

  • 当需要这些功能对象时,需求方法有何不同?

2 个答案:

答案 0 :(得分:5)

  

您如何理解模块的设计,何时适合导出,对象,匿名函数,实例化的命名函数?

  • 真正的极简主义者旨在输出单个功能,如果这样就足够了。这是基于您的模块的范围,并假设一个小而专注的目的。
  • 当您需要一组函数以具有一组有意义的功能时,导出相关函数的对象。例如,tempConversion模块可能同时具有cToFfToC功能。
  • 如果你正在做OO,那么导出构造函数就可以了。
  • 返回实际有效负载(可以是对象或函数)的闭包函数对配置选项很有用。例如,var tip = require('computeTip')(18);可以在闭包中存储18并返回一个函数,该函数在使用数字调用时将计算18%的小费。

这里有一个经验法则:如果只导出一个命名函数la require('average').average(listOfNumbers),那么它是多余的,所以只需导出average直接起作用使其更简洁。如果要显示多个函数,请使用其属性为函数的对象。

  

当需要这些函数或对象时,哪种不同以及require方法的行为?

  • 没有区别。 require只有一种行为可以适应这些技术。

答案 1 :(得分:2)

在两个示例中,实际上都返回一个对象而不是函数类。在第二种情况下,您通过执行该函数来获取对象。为了将该函数用作类,您应该返回一个充当构造函数的函数,然后使用new运算符进行实例化。

话虽如此,如果我将模块视为一个单例,我宁愿选择一个类的对象,这对于包含它的每个文件都是常见的。一个例子是实现我的数据库的公共访问层的模块。

如果您打算多次实例化它,则更有意义。一个示例是数据库模式的特定模型类,如User类。