" var self = module.exports;"意思?

时间:2016-03-08 02:39:41

标签: javascript node.js

我看到一行代码:

var self = module.exports ;

在nodejs项目中。

我知道" module.exports"的含义,我找不到有关此代码的任何信息。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

大多数时候,人们使用名为self的变量来存储对可能在另一个函数上下文中被覆盖的内容的引用。 (它可以被称为任何东西:_thisthat等。)

示例:

    var lib = require('lib');

    var self = module.exports;        

    function exportModule(module) {
        // note that 'module' now refers to this function's argument
        // but that's ok because I stored 'module.exports' in 'self' earlier
        for(var p in module) {
           self[p] = module[p];
        }
    }        

    exportModule(lib);

重要提示:

self可能是一个糟糕的变量名称。实际上,self通常用于存储函数的this(这是必需的,因为this会在新的函数范围内被自动覆盖)。变量名self纯粹是一种约定,但违反惯例可能会让其他开发人员感到困惑。

更好的变量名称可能是_exports

最后,您可能不应该首先为变量moduleexports命名。

答案 1 :(得分:1)

只是有人将module.exports的快捷方式保存到本地变量中,因此可以引用self.something而不是module.exports.something。它也可以是:

var myModule = module.exports;

名称self在语言中没有特殊含义 - 只是变量名称 - 尽管它通常用作闭包中this的保存值(这不是它在这里使用的内容) )。

通常不需要此额外快捷方式,因为exports已经是module.exports的预定义快捷方式,因此使用名为self的变量必须只是个人偏好编码样式或正在由没有意识到exports已经是预定义快捷方式的人使用。