Javascript 如何从另一个文件调用自执行函数
我正在研究Javascript的面向对象特性,并且正在研究“模块模式”。我有一个自动执行的函数,我想从另一个文件调用它,但我总是出错 以下是自动执行模块:Javascript 如何从另一个文件调用自执行函数,javascript,Javascript,我正在研究Javascript的面向对象特性,并且正在研究“模块模式”。我有一个自动执行的函数,我想从另一个文件调用它,但我总是出错 以下是自动执行模块: var basketModule = (function () { var basket = []; function doSomethingPrivate() { //... } // Return an object exposed to the public return {
var basketModule = (function () {
var basket = [];
function doSomethingPrivate() {
//...
}
// Return an object exposed to the public
return {
// Add items to our basket
addItem: function( values ) {
basket.push(values);
},
// Get the count of items in the basket
getItemCount: function () {
return basket.length;
},
};
})();
我试图从另一个名为Run.js的文件中使用它:
var basketModule = require("./basketModule");
basketModule.addItem({
item: "bread",
price: 0.5
});
console.log( basketModule.getItemCount() );
当我运行这个节点run.js
时,我得到一个错误:
basketModule.addItem不是函数
我尝试像这样添加对basketModule的调用:basketModule()代码>紧跟在require之后,但这会导致
TypeError:basketModule不是函数
var basketModule = (function () {
var basket = [];
function doSomethingPrivate() {
//...
}
// Return an object exposed to the public
return {
// Add items to our basket
addItem: function( values ) {
basket.push(values);
},
// Get the count of items in the basket
getItemCount: function () {
return basket.length;
},
};
})();
module.exports = basketModule;
我错过了什么
console.log( basketModule.getItemCount());
通过调用require,添加module.exports=basketModule,您需要先模块化导出类,然后才能使用它代码>在函数之后
var basketModule = (function () {
var basket = [];
function doSomethingPrivate() {
//...
}
// Return an object exposed to the public
return {
// Add items to our basket
addItem: function( values ) {
basket.push(values);
},
// Get the count of items in the basket
getItemCount: function () {
return basket.length;
},
};
})();
module.exports = basketModule;
也在您的其他文件中
var basketModule = require("./src/basketModule.js");
basketModule.addItem({
item: "bread",
price: 0.5
});
console.log(basketModule.getItemCount());
在上面,我创建了一个新的basketModule实例,然后在其上调用.addItem()
。您需要导出代码:module.exports=basketModule
。查看代码中的,匿名函数无法定义basketModule
。添加module.exports=basketModule
可以消除错误,但尝试使用new basketModule
会导致basketModule不是函数。你回答了我的问题,所以我会接受答案,但我想知道为什么会发生新错误。你可能还需要在你刚刚注意到的问题末尾包含.js
。将快速重新创建您的示例和测试@Eddy我在我的回答中对自己的回答进行了修改,我会更新它,但会进行测试。那么你能在测试中使用new
并创建另一个对象吗?我想知道你是否需要一个构造函数。在你的例子中,因为它是一个自动执行的匿名函数,你只能通过调用var basketModule=require(“./src/basketModule.js”)
来拥有一个对象的实例,如果你想要更多,新关键字在这里不可用,因为构造函数将不可用。这个新关键字的使用是我在这里的第二个猜测,因为我最初没有把它放在适当的位置,因为我认为你做不到。结果证明我第一次是对的。