Javascript 如何从另一个文件调用自执行函数

Javascript 如何从另一个文件调用自执行函数,javascript,Javascript,我正在研究Javascript的面向对象特性,并且正在研究“模块模式”。我有一个自动执行的函数,我想从另一个文件调用它,但我总是出错 以下是自动执行模块: var basketModule = (function () { var basket = []; function doSomethingPrivate() { //... } // Return an object exposed to the public return {

我正在研究Javascript的面向对象特性,并且正在研究“模块模式”。我有一个自动执行的函数,我想从另一个文件调用它,但我总是出错

以下是自动执行模块:

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”)
来拥有一个对象的实例,如果你想要更多,新关键字在这里不可用,因为构造函数将不可用。这个新关键字的使用是我在这里的第二个猜测,因为我最初没有把它放在适当的位置,因为我认为你做不到。结果证明我第一次是对的。