this.prototype和module.exports之间的区别是什么?

3
作为一个对 Node.js 不太熟悉的新手,我正在寻找一些资料、编写一些测试代码以及阅读其他人的代码。
我发现在 Node.js 中创建/导入(使用)模块是很典型的。我看到了定义“公共”方法和函数的不同方式,两种方式似乎也都可以正常工作:
  • module.exports
  • this.prototype
使用其中一种方式和另一种方式有明显区别吗?还是两种方法只是做同样的事情的不同方式?哪一种更好,还是取决于上下文呢?

2
从未见过使用 this.prototype 来定义模块。您应该始终遵循在文档中定义的方法。 - Ben Fortune
你所链接的代码中没有 this.prototype - mscdex
1
@BenFortune 最近也发现了这个问题:https://dev59.com/a3RB5IYBdhLWcg3wn4UL - charliebrownie
1
@charliebrownie,“this.prototype”和“variable.prototype”之间有很大的区别。 - Ben Fortune
1
variable.prototype的情况下,variable通常会指向一个“构造函数”。prototype是每个该构造函数的新实例将从中继承属性的对象。JavaScript .prototype如何工作? - Jonathan Lonowski
显示剩余4条评论
1个回答

2

您应该使用exports将属性附加到预定义的导出对象,或重新分配module.exports到自己的对象。当导出构造函数时,后者是常见的做法。

exports.foo = function() { console.log('Hello world!'); };
exports.add = function(a, b) { return a + b; };

// Then the module might be used like so:
// var mymodule = require('./mymodule');
// mymodule.foo();
// console.log(mymodule.add(1, 9));

或者替换 exports 对象:

function Foo() {

}

module.exports = Foo;

// then typically users do this in their script:
// var Foo = require('./mymodule');
// var myFoo = new Foo();

1
是的,module.exportsexports其实是一样的东西,对吧?在这里有一个很好的解释:点击这里 - charliebrownie
1
这是 module.exports,但是是的,在最开始它们是相同的东西。然而 module.exports 允许你像我示例中展示的那样重写导出对象。 - mscdex
你说得对,我拼错了,谢谢指出。我刚刚编辑了整个内容。谢谢! - charliebrownie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接