पायथन पृष्ठभूमि से आते हुए, मैंने इसे पढ़ा है, जावास्क्रिप्ट सीखना:

कक्षाएं वास्तव में "विशेष कार्य" हैं, और जैसे आप फ़ंक्शन एक्सप्रेशन और फ़ंक्शन घोषणाओं को परिभाषित कर सकते हैं, वैसे ही क्लास सिंटैक्स में दो घटक होते हैं: क्लास एक्सप्रेशन और क्लास डिक्लेरेशन।

dev.mozilla वेबसाइट पर..

मैं जो समझता हूं वह यह है:

  • ओओपी में कार्य वस्तुएं हैं

  • और क्लास फंक्शन नहीं हैं।

  • और हो सकता है कि कक्षाएं स्वयं वस्तुएं हों। मुझे यकीन नहीं है।

क्या मै गलत हु?

1
Omar AlHadidi 4 सितंबर 2021, 15:08
3
एक जावास्क्रिप्ट क्लास डिक्लेरेशन क्लास के नाम को उसके नाम के रूप में इस्तेमाल करते हुए एक कंस्ट्रक्टर फंक्शन बनाता है। क्लास डिक्लेरेशन की सामग्री कंस्ट्रक्टर प्रोटोटाइप को इनिशियलाइज़ करती है और फंक्शन की वास्तविक बॉडी बनाती है। तो, वास्तव में, हाँ, एक वर्ग घोषणा एक फ़ंक्शन बनाती है।
 – 
Pointy
4 सितंबर 2021, 15:10
जेएस में, कक्षाएं कार्य हैं और कार्य वस्तुएं हैं। हालांकि, class को इंस्टेंट करते समय आपको new का उपयोग करना होगा। आप एक सामान्य फ़ंक्शन की तरह class को कॉल नहीं कर सकते।
 – 
Sebastian Simon
4 सितंबर 2021, 15:14
सुकर है। मुझे खेद है अगर मैं थोड़ी गहरी खोज के बारे में थोड़ा आलसी था। अब मैं काफी हद तक समझ गया हूं। मैं जावास्क्रिप्ट में बहुत नौसिखिया हूं, इसलिए मुझे आपके द्वारा उपयोग किए गए कुछ शब्दों को समझने के लिए एक खोज करनी पड़ी। धन्यवाद!
 – 
Omar AlHadidi
4 सितंबर 2021, 15:47
लेकिन अगर function है तो class कीवर्ड का क्या उद्देश्य है? कंसोल इसे फ़ायरफ़ॉक्स में स्वीकार करता है।
 – 
Omar AlHadidi
4 सितंबर 2021, 15:59
1
देखें जावास्क्रिप्ट: फ़ंक्शन और क्लास में क्या अंतर है। टी.जे. द्वारा पुराने उत्तरों के बारे में टिप्पणियों पर ध्यान दें। भीड़। यदि आप कक्षाओं जैसा कुछ चाहते हैं तो आपको हमेशा class कीवर्ड को प्राथमिकता देनी चाहिए। यदि आप सामान्य कार्यों की तरह कुछ चाहते हैं तो आपको विधियों या तीर कार्यों का उपयोग करना चाहिए। एक function सामान्य कार्यों के रूप में या कक्षाओं के सीमित रूप के रूप में व्यवहार कर सकता है (उदाहरण के लिए मूल वर्गों को उप-वर्गीकरण पूरी तरह से संभव नहीं है, कोई निजी क्षेत्र नहीं है, ...), और वे अब बहुत उपयोगी नहीं हैं (ईसीएमएस्क्रिप्ट 2015 से पहले, यह एकमात्र प्रकार का कार्य था)।
 – 
Sebastian Simon
4 सितंबर 2021, 16:11

1 उत्तर

सबसे बढ़िया उत्तर

कक्षाएं वास्तव में कार्य हैं, और कार्य भी वस्तुएं हैं - आप वस्तुओं की तरह ही कार्यों पर मनमाने ढंग से कुंजी-मूल्य जोड़े डाल सकते हैं।

class X{}

console.log(typeof X);
console.log(X instanceof Object);

यह एक वर्ग घोषणा है। एक वर्ग अभिव्यक्ति की तरह है:

const TheX = class X{}

console.log(typeof TheX);
console.log(TheX instanceof Object);

जब किसी वर्ग में सीधे कुंजी-मूल्य जोड़े होते हैं (किसी वस्तु की तरह), तो गुणों को आम तौर पर "स्थैतिक" कहा जाता है:

class X{
  static prop = 'foo';
}

console.log(X.hasOwnProperty('prop'));

class के साथ बनाई गई कक्षाओं को new के बिना नहीं बुलाया जा सकता है, लेकिन function के साथ बनाई गई कक्षाएं (जिस स्थिति में यह एक मानक फ़ंक्शन के बराबर है) कर सकती हैं।

function X() {
}

// As a class:
const x = new X();

// As an ordinary function:
const somethingElse = X();

function सिंटैक्स के साथ, फ़ंक्शन एक वर्ग के रूप में व्यवहार करता है या एक सादे फ़ंक्शन के रूप में कॉलर द्वारा निर्धारित किया जाता है - new का उपयोग किया जाता है या नहीं। यदि new का उपयोग किया जाता है, तो फ़ंक्शन के अंदर this को X.prototype से विरासत में मिली वस्तु के रूप में सेट किया जाता है, जो अंत में स्वचालित रूप से वापस आ जाती है। यदि new का उपयोग नहीं किया जाता है, तो फ़ंक्शन के अंदर this कॉलिंग संदर्भ पर सेट है यदि कोई है (उदाहरण के लिए someObj.X() में this someObj होगा) .

2
Bergi 5 सितंबर 2021, 14:31
और फ़ंक्शन और क्लास के बीच मुख्य अंतर यह है कि this क्लास में ही क्लास ऑब्जेक्ट की ओर इशारा करता है, जबकि फंक्शन में यह उसके पैरेंट की ओर इशारा करता है?
 – 
vanowm
4 सितंबर 2021, 15:16
1
इस प्रकार, this का निर्धारण इस बात से होता है कि इसे कैसे कहा जाता है। new X() X को एक वर्ग की तरह बुलाता है, जो इसे X.prototype से विरासत में मिली वस्तु का this देता है। X() (जब X को class सिंटैक्स के बजाय फ़ंक्शन सिंटैक्स के साथ घोषित किया जाता है) इसके परिणामस्वरूप यह एक सामान्य फ़ंक्शन की तरह व्यवहार करता है।
 – 
CertainPerformance
4 सितंबर 2021, 15:24
उन्हें फहराया नहीं गया है क्योंकि (1) ES6 के let और const के साथ इनलाइन, यह सहज नहीं है और बग-प्रवण होगा (2) वर्ग घोषणाओं के दुष्प्रभाव हो सकते हैं (उनके स्थिर गुणों में)
 – 
CertainPerformance
4 सितंबर 2021, 16:15
धन्यवाद, मुझे मिल गया। लेकिन मैं जानना चाहता था .. क्या एक वर्ग को परिभाषित करना सही है, चाहे वह एक घोषणा हो या एक अभिव्यक्ति, खाली कोष्ठक (घुंघराले वाले) के साथ? या आप इसे ऐसे ही एक उदाहरण के रूप में लिख रहे थे?
 – 
Omar AlHadidi
4 सितंबर 2021, 21:25