es6 Javascript class using this inside a callback [duplicate]
The new es6 class allows you to use the self reference variable this
inside methods.
However if a class method has a sub function or a callback, that function/callback no longer has access to the self reference variable this
class ClassName {
constructor(dir){
this.dir = dir;
fs.access(this.dir, fs.F_OK | fs.W_OK, this.canReadDir);//nodejs fs.access with callback
}
canReadDir(err){
this.dir;// NO ACCESS to class reference of this
}
//OR
aMethod(){
function aFunc(){
this.dir;// NO ACCESS to class reference of this
}
}
}
Is there any solution to this?
You have the following options:
1) Use an arrow function:
class ClassName {
// ...
aMethod(){
let aFun = () => {
this.dir;// ACCESS to class reference of this
}
}
}
2) Or the bind()
method:
class ClassName {
// ...
aMethod(){
var aFun = function() {
this.dir;// ACCESS to class reference of this
}.bind(this);
}
}
3) Store this
in a specialised variable:
class ClassName {
// ...
aMethod(){
var self = this;
function aFun() {
self.dir;// ACCESS to class reference of this
}
}
}
This article describes the necessary details about this
and arrow functions in JavaScript.
Put a reference to dir in aMethod(), then use that in aFunc like
aMethod() {
var tempDir = this.dir;
aFunc() {
console.log(tempDir);
}
}
The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .