尝试在Node中创建多个工厂。他们必须在单独的文件中吗?如果是,我如何确保同时访问它们?
index.js
var myFunc = function () {
this.data = {
thingOne: null,
thingTwo: null,
thingThree: null
};
this.fill = function (info) {
for (var prop in this.data) {
if (this.data[prop] !== 'undefined') {
this.data[prop] = info[prop];
}
}
};
this.triggerAction = function () {
//make some action happen!
};
module.exports = function (info) {
var instance = new myFunc();
instance.fill(info);
return instance;
};
当我在下面添加另一个函数时,它会用对象打破现有代码[object Object]没有方法'triggerAction:'
var myFunc2 = function () {
this.data = {
thingOne: null,
thingTwo: null,
thingThree: null
};
this.fill = function (info) {
for (var prop in this.data) {
if (this.data[prop] !== 'undefined') {
this.data[prop] = info[prop];
}
}
};
this.triggerAction2 = function () {
//make some action happen!
};
};
module.exports = function (info) {
var instance = new myFunc2();
instance.fill(info);
return instance;
};
所以我必须将第二个函数放在一个单独的文件中吗?如果我这样做,我如何修改package.json以确保它看到第二个文件?谢谢!
答案 0 :(得分:2)
简短的回答是否定的。
您看到的错误是由于您覆盖了模块的exports属性的值而导致的 - 有效地将第一个赋值替换为最后一个赋值。
如果您希望这些模块位于同一模块中,则需要单独导出它们:
module.exports.factoryA = function(...) {...}
module.exports.factoryB = function(...) {...}
要从另一个模块引用这些模式,这些模式中的任何一个都可以工作:
var factories = require('./myfactories');
var factoryAResult = factories.factoryA(...);
var factoryBResult = factories.factoryB(...);
或
var factoryA = require('./myfactories').factoryA;
var factoryAResult = factoryA(...);