3

考虑我想公开一个名为Print

  1. 绑定方法为prototype

文件另存为 Printer.js

var printerObj = function(isPrinted) {
            this.printed = isPrinted;        
    }

printerObj.prototype.printNow = function(printData) {
        console.log('= Print Started =');
};
module.exports = printerObj;

然后printNow()通过将代码require('Printer.js').printNow()放入任何外部 .js 节点程序文件中进行访问。

  1. 导出方法本身使用module.exports

文件另存为 Printer2.js

var printed = false;   
function printNow() {
console.log('= Print Started =');
}    
module.exports.printNow = printNow;

然后printNow()通过将代码require('Printer2.js').printNow()放入任何外部 .js 节点程序文件中进行访问。

谁能说出与 Node.js 相关的区别和最佳方法?

4

2 回答 2

4

绝对是第一种方式。它被称为,您可以在Twitter和 Mikeal Rogers 的博客substack pattern上阅读它。一些代码示例可以在解析器中的玉 github 存储库中找到:

var Parser = exports = module.exports = function Parser(str, filename, options){
  this.input = str;
  this.lexer = new Lexer(str, options);
  ...
};

Parser.prototype = {

  context: function(parser){
    if (parser) {
      this.contexts.push(parser);
    } else {
      return this.contexts.pop();
    }
  },

  advance: function(){
    return this.lexer.advance();
  }
};
于 2013-01-25T07:53:56.807 回答
3

在第一个示例中,您正在创建一个类,理想情况下,您应该在调用程序中将它与“new”一起使用:

var PrinterObj = require('Printer.js').PrinterObj;
var printer = new PrinterObj();
printer.PrintNow();

这是一个很好的阅读主题:http ://www.2ality.com/2012/01/js-inheritance-by-example.html

在第二个示例中,您将返回一个函数。

不同之处在于您可以拥有第一个示例的多个实例(前提是您按照指示使用 new),但只有一个第二个方法的实例。

于 2013-01-25T15:33:47.097 回答