जावास्क्रिप्ट में कक्षाएं

जावास्क्रिप्ट में कक्षाएं

यह लेख जावास्क्रिप्ट में कक्षाओं की व्याख्या करता है।

YouTube Video

जावास्क्रिप्ट में कक्षाएं

जावास्क्रिप्ट में, एक कक्षा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की अवधारणा को शामिल करती है और वस्तुओं के लिए एक खाका के रूप में कार्य करती है। कक्षाओं के साथ, आप एक वस्तु के गुणधर्मों और विधियों को संक्षेप में परिभाषित कर सकते हैं, जिससे पुन: उपयोगिता और कोड संगठन में सुधार होता है। कक्षा सिंटैक्स को जावास्क्रिप्ट में ES6 के साथ पेश किया गया था।

कक्षा परिभाषा

एक कक्षा को class कीवर्ड के साथ परिभाषित किया जाता है और इसे आमतौर पर कंस्ट्रक्टर नामक विधि के साथ प्रारंभ किया जाता है।

 1class Person {
 2    // Constructor method (called when the class is instantiated)
 3    constructor(name, age) {
 4        this.name = name; // Property definition
 5        this.age = age;
 6    }
 7
 8    // Method definition
 9    greet() {
10        return `Hello, my name is ${this.name}`;
11    }
12}
13
14// Instantiation of the class
15const alice = new Person("Alice", 25);
16console.log(alice.greet()); // Hello, my name is Alice
  • हम class Person के साथ एक कक्षा परिभाषित करते हैं।
  • कंस्ट्रक्टर एक विशेष विधि है जिसे वस्तु बनाए जाने पर स्वचालित रूप से बुलाया जाता है।
  • this कुंजीशब्द कक्षा के भीतर कक्षा के उदाहरण (वस्तु) को संदर्भित करता है।

कक्षा गुण और विधियां

एक कक्षा गुणधर्मों और विधियों को परिभाषित कर सकती है। गुणधर्म वस्तु के विशेषताओं का प्रतिनिधित्व करते हैं, और विधियां इसकी कार्यक्षमताओं का प्रतिनिधित्व करती हैं।

 1class Car {
 2    constructor(brand, model) {
 3        this.brand = brand;
 4        this.model = model;
 5    }
 6
 7    // Method definition
 8    drive() {
 9        console.log(`Driving a ${this.brand} ${this.model}`);
10    }
11}
12
13const car1 = new Car("Toyota", "Corolla");
14car1.drive(); // Driving a Toyota Corolla

इस उदाहरण में, Car कक्षा को brand और model गुणधर्मों तथा drive विधि के साथ घोषित किया गया है।

कक्षा विरासत

कक्षाएं अन्य कक्षाओं से विरासत में प्राप्त कर सकती हैं। विरासत का उपयोग करके, आप एक मौजूदा कक्षा के आधार पर एक नई कक्षा बना सकते हैं और इसमें अतिरिक्त कार्यक्षमता जोड़ सकते हैं।

 1class Animal {
 2    constructor(name) {
 3        this.name = name;
 4    }
 5
 6    speak() {
 7        console.log(`${this.name} makes a noise`);
 8    }
 9}
10
11// Inherit from the Animal class
12class Dog extends Animal {
13    constructor(name, breed) {
14        super(name); // Call the constructor of the parent class (Animal)
15        this.breed = breed;
16    }
17
18    // Override the method
19    speak() {
20        console.log(`${this.name} barks`);
21    }
22}
23
24const dog = new Dog("Rex", "German Shepherd");
25dog.speak(); // Rex barks

इस उदाहरण में, Dog कक्षा Animal कक्षा से विरासत में प्राप्त करती है।

  • Animal कक्षा से विरासत में प्राप्त करने के लिए extends कुंजीशब्द का उपयोग किया जाता है।
  • Dog कक्षा के कंस्ट्रक्टर में, मूल कक्षा के कंस्ट्रक्टर को बुलाने के लिए super() का उपयोग किया जाता है। यह आपको मूल कक्षा की आरंभिक प्रक्रिया विरासत में प्राप्त करने की अनुमति देता है।
  • विरासत में प्राप्त कक्षा के भीतर, आप मूल कक्षा की विधियों को ओवरराइड कर सकते हैं। इस उदाहरण में, "Rex makes a noise" के बजाय, "Rex barks" प्रदर्शित किया जाता है।

स्थिर विधियाँ

जब आप एक क्लास के भीतर एक स्थिर विधि को परिभाषित करते हैं, तो यह विधि स्वयं क्लास से संबंधित हो जाती है। स्थिर विधियों को उदाहरण बनाए बिना भी बुलाया जा सकता है।

1class MathUtils {
2    // Static method
3    static add(a, b) {
4        return a + b;
5    }
6}
7
8console.log(MathUtils.add(5, 10)); // 15

इस उदाहरण में, MathUtils क्लास में add नामक एक स्थिर विधि परिभाषित है।

  • static कीवर्ड का उपयोग स्थिर विधि को परिभाषित करने के लिए किया जाता है।
  • स्थिर विधियाँ क्लास के उदाहरण से संबंधित नहीं होतीं और इन्हें सीधे क्लास से ही बुलाया जा सकता है।

गेटर्स और सेटर्स

क्लास में गेटर्स और सेटर्स को परिभाषित करके, आप गुणों को प्राप्त करने और सेट करने की प्रक्रिया को संकुलित कर सकते हैं।

 1class Rectangle {
 2    constructor(width, height) {
 3        this.width = width;
 4        this.height = height;
 5    }
 6
 7    // Getter
 8    get area() {
 9        return this.width * this.height;
10    }
11
12    // Setter
13    set widthValue(newWidth) {
14        this.width = newWidth;
15    }
16}
17
18const rect = new Rectangle(10, 20);
19console.log(rect.area); // 200
20
21rect.widthValue = 15;
22console.log(rect.area); // 300

इस उदाहरण में, Rectangle क्लास में एक area नामक गेटर और एक widthValue नामक सेटर परिभाषित है।

  • गेटर (get) का उपयोग किसी गुण का मान प्राप्त करने के लिए किया जाता है।
  • सेटर (set) का उपयोग किसी गुण का मान सेट करने के लिए किया जाता है।

क्लास सिंटैक्स सुगर

जावास्क्रिप्ट में, क्लास सिंटैक्स को आंतरिक रूप से कंस्ट्रक्टर फंक्शन और प्रोटोटाइप का उपयोग करके लागू किया जाता है। क्लास सिंटैक्स इनको संक्षेप में लिखने के लिए सिंटेक्टिक सुगर है।

 1// Example without using class syntax
 2function Person(name, age) {
 3    this.name = name;
 4    this.age = age;
 5}
 6
 7Person.prototype.greet = function() {
 8    return `Hello, my name is ${this.name}`;
 9};
10
11const person = new Person("Alice", 25);
12console.log(person.greet()); // Hello, my name is Alice

इस उदाहरण में, एक कंस्ट्रक्टर फंक्शन Person को परिभाषित किया गया है, और greet विधि को प्रोटोटाइप का उपयोग करके परिभाषित किया गया है।

this का प्रबंधन

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

 1class Counter {
 2    constructor() {
 3        this.count = 0;
 4    }
 5
 6    increment() {
 7        this.count++;
 8        console.log(this.count);
 9    }
10}
11
12const counter = new Counter();
13setTimeout(counter.increment, 1000); // NaN
14// NaN, since this.count is undefined, it becomes NaN after incrementing.

ऐसे मामलों में, जब setTimeout को कोलबैक के रूप में पास किया जाता है, तो this का संदर्भ बदल सकता है। इस समस्या से बचने के लिए, bind विधि का उपयोग करके this को फिक्स करें या तीर (arrow) फंक्शन का उपयोग करें।

 1class Counter {
 2    constructor() {
 3        this.count = 0;
 4    }
 5
 6    increment() {
 7        this.count++;
 8        console.log(this.count);
 9    }
10}
11
12const counter = new Counter();
13
14// When using bind
15setTimeout(counter.increment.bind(counter), 1000);
16
17// When using an arrow function
18setTimeout(() => counter.increment(), 2000);

सारांश

  • क्लासेस का उपयोग वस्तुओं को बनाने के लिए खाके के रूप में किया जाता है, जिनमें गुण और विधियाँ परिभाषित की जाती हैं।
  • आप ऑब्जेक्ट ओरिएंटेड अवधारणाओं का उपयोग करते हुए एक क्लास को बढ़ाने के लिए इनहेरिटेंस का उपयोग कर सकते हैं।
  • स्थिर विधियाँ क्लास से संबंधित होती हैं और इन्हें उदाहरण बनाए बिना उपयोग किया जा सकता है।
  • आप गुणों को गेटर्स और सेटर्स का उपयोग करके संकुलित कर सकते हैं।
  • जावास्क्रिप्ट की क्लास सिंटैक्स सिंटैक्स शुगर है और आंतरिक रूप से प्रोटोटाइप-आधारित इनहेरिटेंस का उपयोग करती है।

क्लासेस का उपयोग करके, आप वस्तु-उन्मुख प्रोग्रामिंग को अधिक स्वाभाविक रूप से संभाल सकते हैं, और कोड की पुन: उपयोगिता और रखरखाव में सुधार कर सकते हैं।

आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।

YouTube Video