导出对象 {}
与导出函数
我正在开发一个练习应用程序,我遇到了这个问题我什么时候需要导出对象 {}
而不是函数类?
场景示例:
我正在使用对象样式构建一个简单的身份验证模块
。
// 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
这两种方法都适用,但我不知道选择哪种更适合以及为什么。
问题
在设计模块时,您如何理解何时适合导出、对象、匿名函数、命名函数来实例化?
require 方法在需要这些函数 或对象 时有何区别?
最佳答案
How do you understand in your design of a module, when is appropriate to exports, an object, anonymous function, named function to Instantiate?
- 真正的极简主义者旨在导出单个功能(如果这就足够的话)。这基于您的模块的范围,并假设有一个小而集中的目的。
- 当您需要一组函数以具有一组有意义的功能时,导出相关函数的对象。例如,
tempConversion
模块可能同时具有cToF
和fToC
函数。 - 如果你在做面向对象的,导出构造函数就可以了。
- 返回实际负载(可以是对象或函数)的闭包函数对于配置选项很有用。例如,
var tip = require('computeTip')(18);
可以将 18 存储在闭包中并返回一个函数,该函数在使用数字调用时会计算 18% 的小费。
这里有一个经验法则:如果您只导出一个命名函数,如 require('average').average(listOfNumbers)
,它是多余的,所以只需导出直接使用average
函数使其更加简洁。如果您要公开多个函数,请使用一个属性为函数的对象。
Which are the difference and how the require method behave, when requiring these functions or Objects ?
- 没有区别。
require
有一个单一的行为来适应这些技术中的每一个。
关于javascript - 导出对象与函数 NodeJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27581246/