我是node.js(和stackoverflow)的新手,并没有找到对此的确切解释。
这可能是一个试验性的答案,但希望它能帮助那些也从Python /其他面向对象框架过渡的人。
我已经看过其他关于js中原型概念的文章,还有其他解释node.js的module.exports的文章。
我正在研究Ghost CMS,他们同时使用它们。我似乎无法找出为什么他们会在某些情况下选择一个而不是另一个。
任何帮助都表示赞赏,即使它指向其他链接。
答案 0 :(得分:11)
实际上它们是可以互换的(在某种程度上):
prototype
:
//module.js
function Person (name) {
this.name = name;
}
Person.prototype.sayName = function () {
console.log(this.name);
}
module.exports = Person;
//index.js
var Person = require('./module.js');
var person = new Person('John');
person.sayName();
exports
:
//module.js
exports.init = function (name) {
this.name = name;
return this;
}
exports.sayName = function () {
console.log(this.name);
}
//index.js
var Person = require('./module.js');
var person = Object.create(Person).init('John');
person.sayName();
第一个例子更适用于javascript。
答案 1 :(得分:6)
使用node.js,module.exports是暴露模块公共接口的方式。
/* my-module.js */
exports.coolFunction = function(callback) {
// stuff & things
callback(whatever);
};
在导入/需要它之后,该接口可以由另一个模块使用:
/* another-module.js */
var myModule = require('my-module');
myModule.coolFunction(function(error) { ... });
另一方面,Prototypes(一个普通的Javascript特性)对于定义从构造函数实例化的对象的共享属性和方法很有用。
function User() {
this.name = null;
}
User.prototype.printGreeting = function() {
console.log('Hello. My name is: ' + this.name);
};
var user = new User();
user.name = 'Jill';
user.printGreeting();
干杯。