我正在研究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();
答案 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()
。