我正在處理一些與dataContext相關的打字稿類的重構。事情是昨天我花了很多時間試圖弄清楚爲什麼我沒有從我的新數據上下文中獲得breeze.promise。最後我得到了解決方案,它與「this」的範圍有關。不好用的「本」的 例子:在打字稿類中使用「this」
public getSomething(){
return this.manager.executeQuery(query)
.then(function (data) {
//THIS IS NOT WORKING" INSIDE OF THE FUNCTION
this.log('this log will never be loged :(');
}
}
現在相同的代碼工作正常,但用「」作爲臨時變量:
public getSomething(){
var that=this;
return this.manager.executeQuery(query)
.then(function (data) {
that.log('get something is complete');
}
}
如果你看到在abore第二件代碼工作正常,但我必須重複我的班級中的每種方法的過程。現在我的問題是: 如何在課堂級別創建一個「那個」變量?那可能嗎?
我試着用下面的代碼,但我得到一個編譯錯誤:「無法找到符號」,「。」
export class eventDataContext extends dataContextBase.dataContextBase {
public that;
constructor() {
super();
that = this;
...
}
}
任何想法如何把這個新的變量「那」在課堂上?謝謝!
[JavaScript:爲什麼理解範圍和閉包重要](http://doctrina.org/JavaScript:Why-Understanding-Scope-And-Closures-Matter.html)是一個很好的閱讀 – Satpal
綁定應該這樣的技巧https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind – rafaelcastrocouto
謝謝@SteveFenton給了我一個明確的答案! – Rolando