我想使用我的javascript类的 this
关键字
var MyReaderClass = (function() {
//Const
function MyReaderClass() {
this.readObjects = [];
/**
* Default constructor for the MyReaderClass class
*/
var _constructor = function() {
}
_constructor.call(this);
}
//Public
MyReaderClass.prototype.ReadFiles = function(p_path) {
var files = fs.readdirSync(p_path);
for (var i in files) {
var fileName = files[i];
fs.readFile(path.join(p_path, fileName), 'utf8', function(err, data) {
if (err) {
return console.log(err);
}
else {
var formattedData = /*... Logic to format my data into an object*/;
this.readObject.push(formattedData); //The "this" is not the reference to my class.
}
});
}
}
return MyReaderClass;
})();
即使我正在创建此变量的本地实例(_self, that, instance, etc.
),在readFile
方法之外,我的本地实例也不会填充。
知道我该如何完成?
readFile
是异步方法,您将失去execute context
。您需要绑定类,以将回调作为上下文读取。使用Function.prototype.bind
:
MyReaderClass.prototype.ReadFiles = function(p_path) {
var files = fs.readdirSync(p_path);
for (var i in files) {
var fileName = files[i];
fs.readFile(path.join(p_path, fileName), 'utf8', function(err, data) {
/*readFile callback*/
}.bind(this));//also here was a syntax error
}
}