[英]ES6 in Chrome - Babel Sourcemaps and Arrow Functions lexical scope
我在ES6 class
有一個函數:
class Test {
// Omitted code for brevity
loadEvents() {
$.get('/api/v1/events', (data) => {
this.actions.setEvents(data);
});
}
}
Babel將其轉換為另一種形式,並生成一個_this
變量來控制箭頭函數的詞法范圍。
var _this = this;
$.get('/api/v1/events', function (data) {
_this.actions.setEvents(data);
});
當我在Chrome中使用sourcemaps調試ES6類並在我調用this.actions.setEvents(data);
的行上放置一個斷點this.actions.setEvents(data);
我注意到,Chrome不“重新映射” this
匹配原ES6代碼,而是this
指向外部功能范圍,我需要使用_this
如果我要訪問的箭頭功能詞匯范圍,這是完全沒有意義的。 如果我使用的是源代碼,我會期待Chrome開發者。 工具維護的詞匯范圍, this
在我的ES6代碼。
有沒有辦法讓Chrome開發者工具按預期使用源圖和箭頭功能?
好,
Chromium目前不使用names
的映射。 https://code.google.com/p/chromium/issues/detail?id=327092
this
是一種特殊的綁定,所以它的轉換方式是不可能的。 我能想到的唯一一件事就是像這樣發現它,但我不知道它是否可行:
$.get('/api/v1/events', function (data) { this.actions.setEvents(data); }.bind(this));
看看Babel arrow函數變換器 ,它似乎已經實現了bind(this)解決方案,這使得調試器顯示正確。
我在我的chrome開發人員工具中測試了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.