5

मैं अंदर एक समारोह एक ES6 class:ES6 - कोलाहल Sourcemaps और तीर कार्य शाब्दिक गुंजाइश

class Test { 
    // Omitted code for brevity 
    loadEvents() { 
     $.get('/api/v1/events', (data) => { 
     this.actions.setEvents(data); 
     }); 
    } 
} 

कोलाहल एक अलग रूप को यह transpiles और इसका शाब्दिक गुंजाइश नियंत्रित करने के लिए एक _this चर उत्पन्न करता है तीर समारोह।

var _this = this; 

$.get('/api/v1/events', function (data) { 
    _this.actions.setEvents(data); 
}); 

जब मैं क्रोम में sourcemaps का उपयोग कर ES6 वर्ग डिबग और मैं कहाँ this.actions.setEvents(data); फोन मैं कि क्रोम "फिर से नक्शा" this मूल ES6 कोड मिलान करने के लिए नहीं है, लेकिन इसके बजाय this देखा लाइन पर एक ब्रेकपाइंट डाल बाहरी फ़ंक्शन स्कोप को इंगित करता है और मुझे _this का उपयोग करने की आवश्यकता है यदि मैं तीर फ़ंक्शन लेक्सिकल स्कोप तक पहुंचना चाहता हूं, जो पूरी तरह से व्यर्थ है। अगर मैं स्रोतमैप का उपयोग कर रहा हूं तो मैं क्रोम देव की अपेक्षा करूंगा। मेरे ES6 कोड में this के लेक्सिकल दायरे को संरक्षित करने के लिए टूल।

क्या क्रोम डेवलपर टूल को स्रोतमैप और तीर फ़ंक्शंस के साथ अपेक्षित काम करने का कोई तरीका है?

+0

_ "यह बाहरी कार्य को इंगित करता है" _ - यह मुझे स्पष्ट नहीं है कि इसका मतलब क्या है। क्या यह 'फ़ंक्शन' का मान है? _ "अगर मैं तीर फ़ंक्शन स्कोप तक पहुंचना चाहता हूं तो मुझे _this का उपयोग करने की आवश्यकता है" _ - '_this' क्या करें और इसे 'फ़ंक्शन के दायरे से क्या करना है? – zeroflagL

उत्तर

6

खैर,

  1. क्रोमियम names वर्तमान में से मैपिंग का उपयोग नहीं करता है। https://code.google.com/p/chromium/issues/detail?id=327092

  2. this एक विशेष बाध्यकारी है, इसलिए जिस तरह से इसे पार किया गया है, ऐसा करना संभव नहीं होगा। केवल एक चीज मैं के बारे में सोच सकते हैं कि यह इस तरह transpiling किया जाएगा, लेकिन अगर यह व्यवहार्य है मैं नहीं जानता:

    $.get('/api/v1/events', function (data) { 
        this.actions.setEvents(data); 
    }.bind(this)); 
    
+0

तो आप कह रहे हैं कि क्रोम की तरह एक ब्राउज़र में डीबगर विभिन्न टूल (जैसे वॉच विंडो या कंसोल) में 'इस' के लिए कॉल को अवरुद्ध नहीं कर पाएगा और इसे किसी अन्य चीज़ पर फिर से मैप कर सकता है? मुझे पता है कि यह 'एक विशेष मूल्य है, और वास्तविक' यह 'निश्चित रूप से कुछ नहीं है जिसे संशोधित किया जा सकता है, लेकिन मैं कुछ उन्नत डीबगर सुविधाओं के बारे में और बात कर रहा हूं। –

+0

शायद तकनीकी रूप से यह कर सकता है, लेकिन यह कैसे काम करेगा? आपको 'this' के वास्तविक मूल्य का निरीक्षण करने में सक्षम होना चाहिए। मुझे नहीं पता कि विशेष बाइंडिंग के मूल्यों को अस्पष्ट करने के लिए कुछ भी करना एक अच्छा विचार है। – JMM

+0

हाँ, शायद। लेकिन फिर यदि आप मूल ES6 स्थिति में कोड डीबग नहीं कर सकते हैं तो SourceMaps का बिंदु क्या है? यह मेरी पुस्तक में बहुत भ्रमित और निश्चित रूप से एक बहुत बड़ा मुद्दा है। यदि मैं एक तीर फ़ंक्शन में ब्रेकपॉइंट डालता हूं तो मुझे जांचने की आवश्यकता है कि पारदर्शी कोड में वास्तविक _self/_this चर क्या है और फिर मैं ठीक से डीबग कर सकता हूं, जो एक कठिन डिबगिंग वर्कफ़्लो की तरह लगता है। –

0

Babel arrow function transformer को देखते हुए, ऐसा लगता है यह पहले से ही बाँध को लागू करता है (यह) समाधान , जो डीबगर को सही दिखाता है।

मैंने इसे अपने क्रोम डेवलपर टूल में परीक्षण किया।

संबंधित मुद्दे