javascript - 返回具有相同属性的函数对象或匿名对象

标签 javascript node.js

我无法理解以下两种风格是否有任何区别,哪个更可取,或者它们只是视觉上的不同。

样式 1 - 导出匿名函数,该函数返回以函数作为属性的 JavaScript 对象

module.exports = function(logger,db,config){

    return {
        getAByB : function(b,cb){
            logger.log(b);
            cb(undefined,'someting');
        },


        getName : function(cb){
             db.fetch(function(res){
                 cb(res)
             });
        }
    }
}

样式 2 - 导出带有属性的函数(老实说,我不明白为什么使用函数名称作为返回)

module.exports = function Something(logger,db,config){

        Something.getAByB = function(b,cb){
            logger.log(b);
            cb(undefined,'someting');
        }


        Something.getName = function(cb){
             db.fetch(function(res){
                 cb(res)
             });
        }

        return Something;
}

另请解释一下第二种风格想要实现的目标。

最佳答案

两者不相同

第一个将使用您指定的方法和属性创建一个新对象。这只能作为返回值访问。

var x = module.exports(1, 2, 3); // Object {getAByB: function...
console.log( module.exports.getAByB ); // undefined
module.exports(1, 2, 3).getAByB(4, 5); // works

第二个将把所有方法设置为可链接调用 module.exports 方法本身以及可立即链接的对象:

var y = module.exports(1, 2, 3); // function Something...
console.log( module.exports.getAByB ); // function getAByB...
module.exports(1, 2, 3).getAByB(4, 5); // works

关于javascript - 返回具有相同属性的函数对象或匿名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054972/

相关文章:

javascript - 如何从html表单获取纬度经度值到谷歌地图

javascript - 从nodejs流中获取video.mp4视频标签

javascript - 修改 jQuery 以仅根据屏幕宽度触发特定的 CSS

javascript - 如何使用 angularjs 在 html 中索引变量

javascript - 如何从虚拟内存中为node.js提供html+js服务?

node.js - 连接reactjs和nodejs

node.js - 查找位置的最佳 node.js 模块?

javascript - setTimeout调用堆栈问题

javascript - Node.js 中的 GCM 请求出现 401

node.js - Node 中带有 chrome 50.0.2661.86 的 CORS