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?
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.
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);
}
}