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

时间:2016-12-15 12:12:06

标签: javascript

我正在研究Javascript的面向对象功能,我正在研究“模块模式”。我有一个自执行功能,我想从另一个文件调用,但我一直在收到错误。

这是自执行模块:

[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new App());

        return base.FinishedLaunching(app, options);
    }
}

我正在尝试从另一个名为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() ); 时,我收到错误:

  

basketModule.addItem不是一个函数。

我尝试在需要之后立即添加对basketModule的调用:node Run.js,但这会导致

  

TypeError:basketModule不是函数。

我错过了什么?

basketModule();

1 个答案:

答案 0 :(得分:3)

您需要先模块导出类,然后才能通过调用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()