इस के साथ केवल इस संघर्ष नामक एक चर बनाने चाहिए?

वोट
2

यह एक बहुत ही काल्पनिक उदाहरण है, लेकिन मान लें कि हम एक चर बना सकते हैं _thisएक वर्ग समारोह में कहीं।

class Person {
  constructor (public name : string) {}
  changeName(name) {
    var _this = {};
    (() => {
      this.name = name;
    })();
  }
}

यह के रूप में की उम्मीद काम नहीं करेगा जब हम कहते हैं changeNameक्योंकि संकलित कोड की प्रासंगिकता का इस तरह दिखता है समारोह:

var _this = this;
var _this = {};
(function () {
  _this.name = name;
})();

यह बुरा जावास्क्रिप्ट है: हम दो हैं varएक दूसरे को अधिलेखित घोषणाओं। _thisसंकलक द्वारा बनाई गई मेरी द्वारा ओवरराइट किया जा रहा है _this

जहां तक ​​मैं देख सकता हूँ, इस व्यवहार टाइपप्रति कल्पना में निर्दिष्ट नहीं है।

वे क्यों विरोध करना चाहिए? संकलक का पता नहीं लगा सकते हैं कि मैं नाम के एक चर पैदा की है _thisऔर एक कुछ स्वचालित रूप से उत्पन्न किसी और नाम की तरह _this2एक-दूसरे को कुचल रही से मेरी चर और संकलक उत्पन्न रखने के लिए?

03/10/2012 को 15:08
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
7

संकलक स्वचालित रूप से पैदा करेगा _thisके लिए एक संदर्भ के रूप में thisबंद है कि लैम्ब्डा वाक्य रचना का उपयोग करके बनाया जाएगा की सुविधा के लिए। मैं बहुत यकीन है कि मैंने कहीं टाइपप्रति विनिर्देश में यह पढ़ हूँ, लेकिन मैं इस बात से सहमत हैं कि संकलक इस मामले में एक त्रुटि फेंकना चाहिए।

मैं संकलक अलग है कि यह कैसे जावास्क्रिप्ट का उत्सर्जन करता है के रूप में इस पैदा "मुहावरेदार" (और इसलिए उम्मीद के मुताबिक) जावास्क्रिप्ट का घोषित लक्ष्य का विरोध करने के विचार पसंद नहीं है।

03/10/2012 को 15:27
का स्रोत उपयोगकर्ता

वोट
0

यह क्या आप एक सुरक्षित चर कहेंगे नहीं है? मुझे लगता है कि आप एक चर "इस" या "दस्तावेज़" या तो कहा जाता है की घोषणा नहीं करेंगे।

जब तक एमएस क्या आरक्षित चर हैं के रूप में स्पष्ट है के रूप में, मैं वहाँ एक बड़ी समस्या है नहीं लगता। वे शायद हालांकि उत्पादन चेतावनियों के संकलक बेहतर बना सकते हैं।

03/10/2012 को 15:27
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more