Object Constructors

در جاوااسکریپت، برای ایجاد چندین شیء مشابه می‌توانیم از تابع سازنده (Constructor Function) استفاده کنیم.
این روش باعث می‌شود به جای نوشتن چندین بار کد تکراری، یک قالب (Template) داشته باشیم و از روی آن اشیاء جدید بسازیم.

1️⃣ ایجاد شیء به صورت دستی

راه ساده برای ساخت شیء:

const person1 = { name: "Ali", age: 30, city: "Tehran" }; const person2 = { name: "Sara", age: 25, city: "Mashhad" };

🔹 مشکل: وقتی بخواهیم ده‌ها یا صدها شیء مشابه بسازیم، نوشتن کد تکراری سخت و غیر بهینه می‌شود.

2️⃣ تعریف Constructor Function

تابع سازنده مثل یک کلاس عمل می‌کند. برای تعریف آن:

  • با حرف بزرگ (CamelCase) شروع می‌شود.

  • از this برای مقداردهی propertyها استفاده می‌شود.

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

3️⃣ ایجاد شیء با new

برای ساخت نمونه جدید از تابع سازنده:

const person1 = new Person("Ali", 30, "Tehran"); const person2 = new Person("Sara", 25, "Mashhad"); console.log(person1.name); // Ali console.log(person2.city); // Mashhad

4️⃣ افزودن متد به Constructor

می‌توانیم متد (تابع) هم تعریف کنیم:

function Person(name, age) { this.name = name; this.age = age; this.sayHello = function() { return "سلام، من " + this.name + " هستم."; }; } const p1 = new Person("Ali", 30); console.log(p1.sayHello()); // سلام، من Ali هستم.

5️⃣ استفاده از prototype

بهتر است متدها را خارج از Constructor و روی prototype تعریف کنیم (بهینه‌تر است):

function Person(name, age) { this.name = name; this.age = age; } Person.prototype.sayHello = function() { return "سلام، من " + this.name + " هستم."; }; const p1 = new Person("Ali", 30); console.log(p1.sayHello());

🔹 تفاوت: اگر متد داخل Constructor باشد، برای هر شیء جدید یک نسخه جدا ساخته می‌شود.
🔹 اگر روی prototype باشد، همه اشیاء از یک متد مشترک استفاده می‌کنند → بهینه‌تر.

6️⃣ سازنده‌های داخلی جاوااسکریپت

جاوااسکریپت خودش سازنده‌های داخلی زیادی دارد مثل:

let str = new String("Hello"); let num = new Number(123); let bool = new Boolean(true); let date = new Date(); let arr = new Array("a", "b", "c"); let obj = new Object();

⚠️ اما در عمل، استفاده از لیترال‌ها ("", 123, true, [], {}) رایج‌تر و سریع‌تر است.

📑 جدول خلاصه

مفهوممثالتوضیح
ساخت شیء مستقیم{name: "Ali", age: 30}برای تعداد کم شیء مناسب
تعریف Constructorfunction Person(name, age) { this.name=... }قالبی برای ساخت چندین شیء مشابه
ایجاد شیء جدیدnew Person("Ali", 30)ساخت نمونه از Constructor
افزودن متد داخل Constructorthis.sayHello = function(){...}متد اختصاصی برای هر شیء
افزودن متد با PrototypePerson.prototype.sayHello = function(){...}متد مشترک بین همه اشیاء
سازنده‌های داخلیnew Date(), new Array()توسط خود جاوااسکریپت ارائه شده‌اند