برنامه نویسی

چگونه جاوا اسکریپت سعی می کند کلاس ها را تقلید کند و آیا راه بهتری وجود دارد؟

چگونه جاوا اسکریپت سعی می کند کلاس ها را تقلید کند و آیا راه بهتری وجود دارد؟

جاوا اسکریپت، بدون شک، می تواند زبان بسیار گیج کننده ای باشد، به خصوص برای کسانی که از زبان های سنتی مبتنی بر کلاس مانند جاوا یا سی شارپ می آیند. زمانی که جاوا اسکریپت برای اولین بار توسط برندان ایچ ایجاد شد، قصد داشتیم تا حدودی شبیه جاوا به نظر برسد. این منجر به انتخاب های جالب طراحی شده است، به ویژه در مورد نحوه مدیریت جاوا اسکریپت با برنامه نویسی شی گرا (OOP).

امروز، می‌خواهم نگاهی گذرا بیندازم و ببینم در رویکرد جاوا اسکریپت به کلاس‌ها و نمونه‌های اولیه چه می‌گذرد.

تکامل کلاس ها در جاوا اسکریپت

قبل از معرفی class کلمه کلیدی در ES6 (ECMAScript 2015)، توسعه دهندگان جاوا اسکریپت از توابع سازنده برای ایجاد اشیا و شبیه سازی رفتار کلاس مانند استفاده کردند. در اینجا یک مثال ساده آورده شده است:

// Constructor function
function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.greet = function() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

const john = new Person('John', 30);
john.greet(); // Output: Hello, my name is John and I am 30 years old.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، Person یک تابع سازنده است و روش هایی را به نمونه اولیه آن اضافه می کنیم. این اجازه می دهد تا تمام نمونه های Person برای به اشتراک گذاشتن روش مشابه، صرفه جویی در حافظه.

معرفی از class کلمه کلیدی

با ES6، جاوا اسکریپت را معرفی کرد class کلمه کلیدی، که یک نحو تمیزتر و آشناتر برای ایجاد اشیاء و مدیریت وراثت ارائه می دهد. با این حال، کلاس‌ها در جاوا اسکریپت هنوز بر اساس نمونه‌های اولیه هستند.

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

    greet() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    }
}

const jane = new Person('Jane', 25);
jane.greet(); // Output: Hello, my name is Jane and I am 25 years old.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با وجود قند نحوی، class کلمه کلیدی در جاوا اسکریپت مدل شی گرا جدیدی را معرفی نمی کند. این به سادگی راه راحت تری برای کار با نمونه های اولیه ارائه می دهد.

آشنایی با نمونه های اولیه

در جاوا اسکریپت، هر شیء دارای یک ویژگی داخلی مخفی به نام است [[Prototype]] که به شی دیگری اشاره می کند. این به عنوان زنجیره اولیه شناخته می شود. هنگامی که سعی می کنید به یک ویژگی روی یک شی دسترسی پیدا کنید، جاوا اسکریپت زنجیره اولیه را تا زمانی که ویژگی را پیدا کند یا به انتهای زنجیره برسد، جستجو می کند.

const animal = {
    eats: true
};

const rabbit = {
    jumps: true,
    __proto__: animal
};

console.log(rabbit.eats); // true
console.log(rabbit.jumps); // true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، rabbit را به ارث می برد eats اموال از animal از طریق زنجیره نمونه اولیه

کلاس ها در مقابل نمونه های اولیه: تفاوت چیست؟

در حالی که کلاس‌ها رویکردی ساختاریافته‌تر و سازمان‌یافته‌تر ارائه می‌دهند، نمونه‌های اولیه انعطاف‌پذیری و کنترل بیشتری را ارائه می‌کنند. در اینجا یک مقایسه است:

کلاس ها

  • نحو: تمیزتر و شهودی تر، به ویژه برای توسعه دهندگان از زبان های کلاس محور.
  • خوانایی: خواندن و درک آسان تر.
  • وراثت: از extends کلمه کلیدی برای وراثت

نمونه های اولیه

  • انعطاف پذیری: کنترل بیشتر بر زنجیره ارث.
  • کارایی حافظه: روش ها در بین نمونه ها به اشتراک گذاشته می شوند.
  • سازگاری: در تمام محیط های جاوا اسکریپت، از جمله محیط های قدیمی تر، پشتیبانی می شود.

نمونه کدهای واقعی

استفاده از کلاس ها

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const dog = new Dog('Rex');
dog.speak(); // Output: Rex barks.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از نمونه های اولیه

function Animal(name) {
    this.name = name;
}

Animal.prototype.speak = function() {
    console.log(`${this.name} makes a noise.`);
};

function Dog(name) {
    Animal.call(this, name);
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.speak = function() {
    console.log(`${this.name} barks.`);
};

const dog = new Dog('Rex');
dog.speak(); // Output: Rex barks.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

رویکرد جاوا اسکریپت به OOP از طریق نمونه های اولیه و class کلمه کلیدی ابزارهای قدرتمندی را برای ایجاد و مدیریت اشیاء در اختیار توسعه دهندگان قرار می دهد. در حالی که کلاس‌ها نحوی آشنا و سازمان‌یافته‌تر ارائه می‌دهند، درک نمونه‌های اولیه برای تسلط بر جاوا اسکریپت بسیار مهم است. هر دو روش مزایای خاص خود را دارند و یک توسعه دهنده جاوا اسکریپت خوب باید بسته به نیاز پروژه از هر دو استفاده کند.

با درک مکانیک اساسی نمونه های اولیه، می توانید کدهای کارآمدتر و قابل نگهداری بیشتری بنویسید و از پتانسیل کامل قابلیت های شی گرا جاوا اسکریپت استفاده کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا