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

چگونه جاوا اسکریپت سعی می کند کلاس ها را تقلید کند و آیا راه بهتری وجود دارد؟
جاوا اسکریپت، بدون شک، می تواند زبان بسیار گیج کننده ای باشد، به خصوص برای کسانی که از زبان های سنتی مبتنی بر کلاس مانند جاوا یا سی شارپ می آیند. زمانی که جاوا اسکریپت برای اولین بار توسط برندان ایچ ایجاد شد، قصد داشتیم تا حدودی شبیه جاوا به نظر برسد. این منجر به انتخاب های جالب طراحی شده است، به ویژه در مورد نحوه مدیریت جاوا اسکریپت با برنامه نویسی شی گرا (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
کلمه کلیدی ابزارهای قدرتمندی را برای ایجاد و مدیریت اشیاء در اختیار توسعه دهندگان قرار می دهد. در حالی که کلاسها نحوی آشنا و سازمانیافتهتر ارائه میدهند، درک نمونههای اولیه برای تسلط بر جاوا اسکریپت بسیار مهم است. هر دو روش مزایای خاص خود را دارند و یک توسعه دهنده جاوا اسکریپت خوب باید بسته به نیاز پروژه از هر دو استفاده کند.
با درک مکانیک اساسی نمونه های اولیه، می توانید کدهای کارآمدتر و قابل نگهداری بیشتری بنویسید و از پتانسیل کامل قابلیت های شی گرا جاوا اسکریپت استفاده کنید.