Node.js 出口和这两者之间的区别

Node.js 出口和这两者之间的区别,node.js,requirejs,Node.js,Requirejs,我在一些模块中看到他们使用modules.exports.something=()->,或者exports.something=()-> 在其他一些时候,使用this.something=()->完成 显然导致了同样的行为。一个比另一个好吗?此是指导出对象还是类似对象?导出和模块。导出通常存在于提供某种模块加载系统的环境中。例如,Node.js使用CommmonJS模块系统。RequireJS提供AMD风格的系统。在浏览器中加载的网页如果没有额外加载某种模块系统(如RequieJS),则不会定义

我在一些模块中看到他们使用
modules.exports.something=()->
,或者
exports.something=()->

在其他一些时候,使用
this.something=()->
完成


显然导致了同样的行为。一个比另一个好吗?
是指
导出
对象还是类似对象?

导出
模块。导出
通常存在于提供某种模块加载系统的环境中。例如,Node.js使用CommmonJS模块系统。RequireJS提供AMD风格的系统。在浏览器中加载的网页如果没有额外加载某种模块系统(如RequieJS),则不会定义
导出
模块导出。如果您手头有一个模块系统,并且想要导出值,通常情况下,您会将要导出的内容指定给
导出
模块。导出
,或这些对象上的字段

所指的内容高度依赖于上下文。如果您仅使用
console.log(this)
创建一个文件并使用Node.js运行它,您将看到控制台的
{}
输出。如果您在Chrome中加载的空白HTML页面中尝试相同的操作,您将看到
this
窗口
对象。因此,在浏览器中,将最外层范围中的
this.foo
赋值给
window.foo
相当于将其赋值给
foo
,这是在全局空间中声明
foo
的一种方法。您有时会看到设计用于在各种环境中工作的代码,这些环境会根据运行位置更改
this
的值。比如:

function factory() {
    this.foo = function () {...};
    this.bar = "q";
}

if (typeof exports !== 'undefined')
    factory.call(exports); // CommonJS or AMD environment.
else if (typeof window !== 'undefined')
    factory.call(window); // Browser.
else
    factory.call(this); // Something else.
使用上述
factory
函数上的
call
方法,将
factory
内部
this
的值设置为传递给
call
的第一个参数