2017-01-14 1 views
1

J'ai rencontré une erreur étrange pendant que je travaillais avec la nouvelle version d'ES6. Quand je lance ce morceau de code, je reçois ReferenceError: alertBox is not defined. Est-il possible d'appeler alertBox à l'intérieur de cette fonction? Merci d'avance :)Erreur d'étendue dans le constructeur (ES6)

Voici le code

class main { 
    constructor(data){ 
    this.data=data; 

    // this one works 
    this.alertBox(this.data); 

    this.watchFile(function(){ 
     // this one throws error 
     this.alertBox(this.data); 
    }); 
    } 

    alertBox(data){ 
    alert(data); 
    } 

    watchFile(cb){ 
    cb("changed"); 
    } 
} 

// app.js 
new main("hello"); 

vous pouvez trouver ici l'extrait: https://repl.it/FJUo

Répondre

0

En passant une fonction normale dans watchFile que vous perdez le contexte de this. Dans ES6, vous pouvez utiliser la syntaxe "fonction de flèche" pour créer une fonction qui conserve le bon contexte.

this.watchFile(() => { 
    this.alertBox(this.data); 
}); 
+0

Merci beaucoup! Cela a fonctionné, je ne savais pas que je devais utiliser des fonctions de flèche pour cette raison particulière. Merci encore :) –

+0

Oui, avant ES6 vous deviez lier manuellement 'this' à une fonction normale, mais avec les fonctions de flèche vous obtenez ce comportement gratuitement. – Graham