मुझे पता है कि ईएस 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
तो आप मूल रूप से पूछ रहे हैं कि क्यों दो अधिकतर पूरी तरह अलग भाषाएं अलग-अलग व्यवहार करती हैं? ध्यान दें कि "जावास्क्रिप्ट" में "जावा" प्रोग्रामिंग भाषा जावा के साथ कुछ लेना देना नहीं है। – luk2302
@ luk2302 - अगर आपने कहा कि भाषाओं में मूल रूप से कोई संबंध नहीं है, तो यह सच है। लेकिन जब आप कहते हैं कि 'जावास्क्रिप्ट' में 'जावा' प्रोग्रामिंग भाषा जावा के साथ कुछ लेना देना नहीं है, तो यह गलत है क्योंकि आप एक त्वरित Google खोज के साथ सत्यापित कर सकते हैं। विकिपीडिया से: "... ** सूर्य ** से ट्रेडमार्क लाइसेंस प्राप्त करने पर, जावास्क्रिप्ट नाम अपनाया गया था। ** उस समय यह कुछ हद तक एक विपणन कदम था, जावा के आसपास बहुत लोकप्रिय ** ** –
नहीं केवल आप अलग-अलग भाषाओं की तुलना कर रहे हैं लेकिन विभिन्न अवधारणाओं की भी तुलना कर रहे हैं। _ "मैं कन्स्ट्रक्टर में इसकी आवश्यकता को समझता हूं" _ कन्स्ट्रक्टर फ़ंक्शन को अलग-अलग क्यों संभाला जाना चाहिए? – zeroflagL