我正在使用Electron创建一个小桌面应用并使用module.exports
导出。在“服务器”端,这很好用。但是,当我在前端使用module.exports时,根据Electron docs,我得到了这个错误。
Uncaught TypeError: this.showProgressbar is not a function"
var ViewController = {
getPageCount: function (res) {
this.total = res;
this.showProgressbar(res);
},
showProgressBar: function (num) {
$('.progress-container').addClass('show');
$('.progress-bar').style('width', '0%');
}
};
module.exports = ViewController;
在客户端,这就是我访问此文件的方式。
var view = require(__dirname + '/client/ViewController.js');
ipc.on('page_count', view.getPageCount);
我应该如何访问此实例中的内部方法?
答案 0 :(得分:2)
那是因为在调用回调时,它在错误的上下文中被调用。要绑定上下文,请使用Function.bind。
ipc.on('page_count', view.getPageCount.bind(view));
答案 1 :(得分:2)
ViewController既不是' Class'也不是一个实例,它是一个具有两个属性的普通javascript对象。
如果你希望它的行为像一个类,并且能够在创建实例时从方法中获取其他属性,那么你应该这样做:
var ViewController = function(ipc){
this.ipc=ipc;
this.ipc.on('page_count', this.getPageCount);
};
ViewController.prototype.getPageCount: function (res) {
this.total = res;
this.showProgressbar(res);
},
ViewController.prototype.showProgressBar: function (num) {
$('.progress-container').addClass('show');
$('.progress-bar').style('width', '0%');
}
module.exports = ViewController;
您仍然需要实例化ViewController:
var ViewController = require(__dirname + '/client/ViewController.js');
var controller = new ViewController(ipc);