2017-01-14 7 views
1

新しいバージョンのES6で作業していた間に奇妙なエラー が発生しました。このコードを実行すると、私はReferenceError: alertBox is not definedになります。この関数内でalertBoxを呼び出す方法はありますか?あなたがthisの文脈を失っているwatchFileに正常な機能を渡すことによってhttps://repl.it/FJUoコンストラクタ(ES6)のスコープエラー

答えて

0

:事前に感謝:)

は、ここでは、スニペットを見つけることができるコードここ

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

です。 ES6では、「矢印関数」構文を使用して、正しいコンテキストを保持する関数を作成できます。

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

ありがとうございました!それは働いた、私はその特定の理由のために矢印機能を使用する必要があることを知らなかった。もう一度ありがとう:) –

+0

うん、ES6の前に手動で 'this'を通常の関数にバインドしなければならなかったが、矢印関数を使ってこの動作を自由にする。 – Graham

関連する問題