在 Node 的对象中使用 'this'?
Using 'this' in an object in Node?
我正在使用 Electron 创建一个小桌面应用程序并使用 module.exports
导出。在 'server' 方面,这工作正常。但是,根据 Electron 文档,当我在前端使用 module.exports 时,出现此错误。
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);
在此实例中我应该如何访问内部方法?
那是因为当调用回调时,它是在错误的上下文中调用的。要绑定上下文,请使用 Function.bind.
ipc.on('page_count', view.getPageCount.bind(view));
ViewController 既不是 'Class' 也不是实例,它是一个具有两个属性的普通 javascript 对象。
如果您希望它表现得像 class 并且能够在创建实例时从方法访问其他属性,您应该这样做:
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);
我正在使用 Electron 创建一个小桌面应用程序并使用 module.exports
导出。在 'server' 方面,这工作正常。但是,根据 Electron 文档,当我在前端使用 module.exports 时,出现此错误。
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);
在此实例中我应该如何访问内部方法?
那是因为当调用回调时,它是在错误的上下文中调用的。要绑定上下文,请使用 Function.bind.
ipc.on('page_count', view.getPageCount.bind(view));
ViewController 既不是 'Class' 也不是实例,它是一个具有两个属性的普通 javascript 对象。
如果您希望它表现得像 class 并且能够在创建实例时从方法访问其他属性,您应该这样做:
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);