考虑我想公开一个名为Print
prototype
:文件另存为Printer.js
var printerObj = function(isPrinted) {
this.printed = isPrinted;
}
printerObj.prototype.printNow = function(printData) {
console.log('= Print Started =');
};
module.exports = printerObj;
然后通过将代码printNow()
放入任何外部.js节点程序文件来访问require('Printer.js').printNow()
。
module.exports
导出方法本身:文件另存为Printer2.js
var printed = false;
function printNow() {
console.log('= Print Started =');
}
module.exports.printNow = printNow;
然后通过将代码printNow()
放入任何外部.js节点程序文件来访问require('Printer2.js').printNow()
。
任何人都能说出与Node.js有什么区别和最佳方式吗?
答案 0 :(得分:4)
绝对是第一种方式。它被称为substack pattern
,你可以在Twitter和Mikeal Rogers'blog上阅读。可以在解析器中的jade github repo找到一些代码示例:
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();
}
};
答案 1 :(得分: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
在第二个例子中,您将返回一个函数。
不同之处在于,您可以拥有第一个示例的多个实例(假设您使用了新的指示),但只有第二个方法的一个实例。