{}
与导出功能我正在开发一个练习应用程序,我遇到了一个问题我什么时候需要导出对象{}
而不是函数类?
情景示例:
我正在使用对象样式构建简单身份验证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
它将适用于这两种方法,但我很困惑,选择哪种更合适,为什么。
您如何理解模块的设计,何时适合导出,对象,匿名函数,命名函数实例化
当需要这些功能或对象时,需求方法有何不同?
答案 0 :(得分:5)
您如何理解模块的设计,何时适合导出,对象,匿名函数,实例化的命名函数?
tempConversion
模块可能同时具有cToF
和fToC
功能。var tip = require('computeTip')(18);
可以在闭包中存储18并返回一个函数,该函数在使用数字调用时将计算18%的小费。这里有一个经验法则:如果只导出一个命名函数la require('average').average(listOfNumbers)
,那么它是多余的,所以只需导出average
直接起作用使其更简洁。如果要显示多个函数,请使用其属性为函数的对象。
当需要这些函数或对象时,哪种不同以及require方法的行为?
require
只有一种行为可以适应这些技术。答案 1 :(得分:2)
在两个示例中,实际上都返回一个对象而不是函数类。在第二种情况下,您通过执行该函数来获取对象。为了将该函数用作类,您应该返回一个充当构造函数的函数,然后使用new运算符进行实例化。
话虽如此,如果我将模块视为一个单例,我宁愿选择一个类的对象,这对于包含它的每个文件都是常见的。一个例子是实现我的数据库的公共访问层的模块。
如果您打算多次实例化它,则更有意义。一个示例是数据库模式的特定模型类,如User类。