2017-01-14 7 views
1

У меня возникла странная ошибка , когда я работал с новой версией ES6. Когда я запускаю этот кусок кода, я получаю ReferenceError: alertBox is not defined. Есть ли способ вызвать alertBox внутри этой функции? Заранее спасибо :)Ошибка области в конструкторе (ES6)

Вот код

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"); 

Здесь Вы можете найти фрагмент кода: https://repl.it/FJUo

ответ

0

Пропустив нормальную функцию в watchFile вы теряете контекст this. В ES6 вы можете использовать синтаксис функции «arrow function», чтобы создать функцию, которая сохраняет правильный контекст.

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

спасибо! Это сработало, я не знал, что мне приходится использовать функции стрелок по этой причине. Еще раз спасибо :) –

+0

Да, перед ES6 вам пришлось вручную привязать 'this' к нормальной функции, но со стрелочными функциями вы получите это поведение бесплатно. – Graham