ناساندنی Class لە JavaScript

کلاسەکان لە JavaScript-دا ڕێگەیەکی مۆدێرن و ڕێکخراون بۆ دروستکردنی Object. ئەگەر پێشتر لەگەڵ زمانەکانی وەک Java یان C# کارتان کردبێت، ئەم شێوازە بۆتان ئاشنا دەبێت. لە ڕاستیدا، کلاسەکان لە JavaScript تەنها ڕووکارێکی جوانترن (Syntactic Sugar) بۆ ئەو سیستەمەی کە پێی دەوترێت Prototype-based inheritance.

کلاسەکان یارمەتیدەرن بۆ ئەوەی کۆدەکانت پاکتر، خوێندراوتر و دووبارە بەکارهێنراو (Reusable) بن.

پێکهاتەی سەرەتایی Class

بۆ دروستکردنی کلاس، وشەی کلیلەی class بەکاردەهێنین. هەر کلاسێک پێویستی بە constructor هەیە کە فەنکشنێکی تایبەتە و کاتێک Object-ێکی نوێ دروست دەکەین، ئەو فەنکشنە کار دەکات.

class Car {
  constructor(name, year) {
    this.name = name;
    this.year = year;
  }
}

const myCar = new Car('Toyota', 2022);
console.log(myCar.name); // Toyota

لە نموونەی سەرەوەدا، this ئاماژە بۆ ئەو Object-ە دەکات کە تازە دروست کراوە. هەڵەی باو کە فێرخوازان دەیکەن، بیرچوونی وشەی new-ە کاتێک Object-ێک دروست دەکەن؛ ئەگەر new بەکارنەهێنیت، کلاسەکە وەک فەنکشنێکی ئاسایی کار ناکات.

بەکارهێنانی Method لەناو Class

تۆ دەتوانیت فەنکشن لەناو کلاسەکاندا دابنێیت کە پێیان دەوترێت Method. ئەم فەنکشنانە ڕێگەت پێدەدەن کردارێک لەسەر داتاکانی ناو Object-ەکە ئەنجام بدەیت.

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    return 'سڵاو، ناوی من ' + this.name + 'ە.';
  }
}

const user = new Person('ئاراس', 25);
console.log(user.sayHello());

لێرەدا sayHello دەستی بە this.name دەگات. گرنگە بزانیت کە پێویست ناکات وشەی function بەکاربهێنیت کاتێک Method لەناو کلاسدا دەنووسیت.

میراتگرتن (Inheritance)

یەکێک لە بەهێزترین تایبەتمەندییەکانی کلاس، میراتگرتنە. بە بەکارهێنانی وشەی extends، دەتوانیت کلاسێکی نوێ دروست بکەیت کە هەموو تایبەتمەندییەکانی کلاسێکی تر وەردەگرێت.

class Animal {
  constructor(name) {
    this.name = name;
  }
  eat() {
    console.log(this.name + ' خەریکی خواردنە.');
  }
}

class Dog extends Animal {
  bark() {
    console.log('هەپە هەپ!');
  }
}

const myDog = new Dog('سەگی زیرەک');
myDog.eat(); // میراتی لە Animal وەرگرتووە
myDog.bark(); // تایبەتە بە Dog
تێبینی: کاتێک کلاسێک لە کلاسێکی تر میرات دەگرێت، ئەگەر constructor بەکاربهێنیت، دەبێت سەرەتا super() بانگ بکەیت بۆ ئەوەی constructor-ی دایک (Parent) کار بکات.

Getters و Setters

کلاسەکان ڕێگەت پێدەدەن بە شێوازێکی پارێزراو دەستکاری داتاکان بکەیت. بە بەکارهێنانی get و set دەتوانیت کۆنترۆڵی ئەوە بکەیت چۆن داتاکان دەخوێنرێنەوە یان دەگۆڕدرێن.

ئەرکی ڕاهێنان (Practice Exercise)

هەوڵ بدە کلاسێکی نوێ بە ناوی Book دروست بکەیت. ئەم کلاسە با title و author-ی هەبێت. پاشان Method-ێک دروست بکە بە ناوی getSummary کە ناوی کتێب و نووسەرەکەی بە شێوەی ڕستەیەک بگەڕێنێتەوە. دواتر Object-ێک بە ناوی کتێبی خۆت دروست بکە و ئەنجامەکەی لە console چاپ بکە.