2016-10-26 37 views
0

我已經閱讀了大量有關ES6的文檔,以及隨之而來的變化。我試圖用fetch之類的一些新庫來支持新的oop語法。所以這裏是我有的代碼:ES6:如何使用「this」,以獲取?

apiCall(url, thisAlias=this){ 
    fetch(url).then(function(response){ 
    return response.json(); 
    }) 
    .then(function(respObj){ 
     thisAlias.domUpdater(respObj); 
    }); 
} 

這是在一個基類,它有一個繼承類,並最終會有很多繼承類。這個想法是使用fetch進行通用api調用,並且我可以爲每個繼承類更改domUpdater方法。我花了很多時間讓這段代碼工作,別名這個關鍵字,以便它可以在fetch調用中使用。有沒有更優雅的方式來做到這一點?我似乎無法直接將此作爲論據。

+0

使用.bind()? – diugalde

回答

2

使用arrow functions具有詞彙this將幫助您最利用這件特定的代碼

​​

否則,如果你可以使用較新的async/await,你不必擔心this指向根本不對 - 甚至沒有箭頭功能。

async apiCall (url) { 
    try { 
    let response = await fetch(url); 
    this.domUpdater(response.json()); 
    } 
    catch (err) { 
    console.error(err.message, err); 
    } 
}
+0

感謝您的快速響應。我看過這個箭頭符號,但不明白爲什麼。你能解釋一下它在做什麼,或者指向正確的方向嗎?再一次,謝謝,我很難找到有關ES6的信息。 –

+0

@LoganSaruwatari由於箭頭函數沒有綁定自己的'this'(因此詞法範圍),''this'中的'this'將引用封閉的上下文或類。由於默認情況下,常規函數將其'this'指向窗口,執行'this.domUpdater'將會執行'window.domUpdater'(不正確)。你也可以綁定'this',但箭頭函數通常被認爲更好 – Li357

+0

哇!你用第一塊代碼吹拂我的思想,第二塊將它提升到一個全新的水平。我需要你成爲我的ES6導師。我認識的所有優秀程序員都不會涉足js。 –