2017-01-03 13 views
9

मुझे पता है कि ईएस 6 ने कई समस्याओं को हल किया जो this ईएस 5 में कीवर्ड जैसे कि तीर फ़ंक्शंस और कक्षाओं के साथ मौजूद थे।ईएस 6 कक्षा में "यह" क्यों निहित नहीं है?

मेरा प्रश्न ईएस 6 कक्षा के संदर्भ में this के उपयोग से संबंधित है और इसे स्पष्ट रूप से क्यों लिखा जाना चाहिए। मैं मूल रूप से एक जावा डेवलपर था और मैं एक ऐसी दुनिया से आया जहां कोड की निम्नलिखित पंक्तियां पूरी तरह से प्राकृतिक थीं।

class Person { 
    private String myName; 

    public Person() { 
    myName = "Heisenberg"; 
    } 

    public void sayMyName() { 
    System.out.println("My name is " + myName); 
    } 
} 

संकलक हमेशा की तरह, क्षेत्र myName का मूल्य संदर्भित करेंगे जब तक कि यह नाम myName विधि के दायरे में परिभाषित के साथ एक स्थानीय चर है।

हालांकि, एक बार हम इस कोड ES6 में बदलने का:

class Person { 

    constructor() { 
    this.myName = "Heisenberg"; 
    } 

    sayMyName() { 
    console.log(`My name is ${myName}`); 
    } 
} 

यह काम नहीं करेगा और यह एक Uncaught ReferenceError: myName is not defined फेंक देते हैं। इसे ठीक करने के लिए एक ही रास्ता एक स्पष्ट this संदर्भ में फेंक करने के लिए है:

console.log(`My name is ${this.myName}`) 

मैं निर्माता में this के लिए की जरूरत को समझते हैं के बाद से ES6 कक्षाएं अपने खेतों निर्माता के बाहर से परिभाषित करने की अनुमति नहीं देते, लेकिन मैं समझ में नहीं आ रहा है कि जावास्क्रिप्ट इंजन क्यों नहीं कर सकते हैं (या मानक के कारण नहीं) जावा कंपेलर sayMyName

+1

तो आप मूल रूप से पूछ रहे हैं कि क्यों दो अधिकतर पूरी तरह अलग भाषाएं अलग-अलग व्यवहार करती हैं? ध्यान दें कि "जावास्क्रिप्ट" में "जावा" प्रोग्रामिंग भाषा जावा के साथ कुछ लेना देना नहीं है। – luk2302

+2

@ luk2302 - अगर आपने कहा कि भाषाओं में मूल रूप से कोई संबंध नहीं है, तो यह सच है। लेकिन जब आप कहते हैं कि 'जावास्क्रिप्ट' में 'जावा' प्रोग्रामिंग भाषा जावा के साथ कुछ लेना देना नहीं है, तो यह गलत है क्योंकि आप एक त्वरित Google खोज के साथ सत्यापित कर सकते हैं। विकिपीडिया से: "... ** सूर्य ** से ट्रेडमार्क लाइसेंस प्राप्त करने पर, जावास्क्रिप्ट नाम अपनाया गया था। ** उस समय यह कुछ हद तक एक विपणन कदम था, जावा के आसपास बहुत लोकप्रिय ** ** –

+2

नहीं केवल आप अलग-अलग भाषाओं की तुलना कर रहे हैं लेकिन विभिन्न अवधारणाओं की भी तुलना कर रहे हैं। _ "मैं कन्स्ट्रक्टर में इसकी आवश्यकता को समझता हूं" _ कन्स्ट्रक्टर फ़ंक्शन को अलग-अलग क्यों संभाला जाना चाहिए? – zeroflagL

उत्तर

5

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

कवर के तहत इसके बारे में कोई जादू नहीं है। असल में यह प्रोटोटाइप विरासत पर एक सिंथेटिक चीनी है जो जावास्क्रिप्ट की शुरुआत के बाद से था।

जेएस में कक्षाओं के बारे में और अधिक पढ़ने के लिए here और here पर क्लिक करें।

आपको स्पष्ट रूप से this लिखने की आवश्यकता क्यों है क्योंकि जेएस में यह हमेशा संदर्भ संवेदनशील होता है, इसलिए आपको सटीक वस्तु का संदर्भ लेना चाहिए। more पढ़ें।

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