web-dev-qa-db-fra.com

es6 classe Javascript utilisant ceci dans un callback

La nouvelle classe es6 vous permet d'utiliser la variable de référence automatique this à l'intérieur des méthodes.
Cependant, si une méthode de classe a une sous-fonction ou un rappel, cette fonction/rappel n'a plus accès à la variable de référence automatique 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
    }
  }
}

Y a-t-il une solution à cela?

14
fredtma

Vous avez les options suivantes:

1) Utilisez une fonction arrow:

class ClassName {
  // ...
  aMethod(){
    let aFun = () => {
      this.dir;// ACCESS to class reference of this
    }
  }
}

2) Ou la méthode bind():

class ClassName {
  // ...
  aMethod(){
    var aFun = function() {
      this.dir;// ACCESS to class reference of this
    }.bind(this);
  }
}

3) Stockez this dans une variable spécialisée:

class ClassName {
  // ...
  aMethod(){
    var self = this;
    function aFun() {
      self.dir;// ACCESS to class reference of this
    }
  }
}

Cet article décrit les détails nécessaires sur les fonctions this et arrow en JavaScript.

25
Dmitri Pavlutin

Mettez une référence à mourir dans une Method (), puis utilisez-la dans un Func comme

aMethod() {
    var tempDir = this.dir;
    aFunc() {
        console.log(tempDir);
    }
}
0
Bálint