2016-04-08 7 views
6

La nuova classe es6 consente di utilizzare la variabile di riferimento this all'interno dei metodi.
Tuttavia, se un metodo di classe ha una funzione secondaria o un callback, che la funzione/callback non ha più accesso alla variabile di riferimento sé this
es6 classe Javascript che utilizza questa funzione all'interno di una richiamata

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 
    } 
    } 
} 

Esiste una soluzione a questo?

+1

È possibile invece creare una funzione di freccia 'const aFunc =() => this.dir;' – zerkms

+0

Utilizzare [Funzioni freccia] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/ funzioni/Arrow_functions # Lexical_this). –

+1

"* La nuova classe es6 consente di utilizzare la variabile di riferimento automatico all'interno dei metodi. *" - uh, no, questo non ha nulla a che fare con la sintassi 'class' di ES6. La parola chiave 'this' funziona come sempre nei metodi. – Bergi

risposta

14

Sono disponibili le seguenti opzioni:

1) Utilizzare un freccia funzione:

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

2) O il metodo bind():

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

3) Conservare this in una variabile specializzata:

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

This article descrive i dettagli necessari circa this freccia e funzioni in JavaScript.

+0

Non è una parola preservata? –

+0

@ Bálint Nope. 'self' può essere usato. –

+0

Grazie mille –

0

Mettere un riferimento a dir in aMethod(), quindi utilizzare tale in aFunc come

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

L'uso di 'var self = this;' or 'var that = this;' e usarlo successivamente è già una pratica abbastanza ben compresa a tale scopo. – Monish

Problemi correlati