2017-01-14 53 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中,您可以使用「箭頭函數」語法創建一個保持正確上下文的函數。

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

非常感謝!它的工作原理,我不知道我必須使用箭頭功能的特殊原因。再次感謝:) –

+0

是的,在ES6之前,您必須手動將'this'綁定到正常的函數,但是使用箭頭函數您可以免費獲得這種行爲。 – Graham