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 .
Read More:   Request header field Access-Control-Allow-Headers is not allowed by Access-Control-Allow-Headers

Similar Posts