Object Accessors

🔹 Accessors چی هستن؟

Accessors متدهایی هستن که به ما اجازه میدن برای پراپرتی‌های آبجکت:

  • getter → مقدار رو بخونیم

  • setter → مقدار رو ست کنیم (با کنترل دلخواه)

1️⃣ Getter

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

const person = { firstName: "Ali", lastName: "Rezaei", get fullName() { return this.firstName + " " + this.lastName; } }; console.log(person.fullName); // Ali Rezaei

👉 نکته: اینجا fullName مثل یک پراپرتی خونده میشه، نه متد (person.fullName نه ()person.fullName).

2️⃣ Setter

با set می‌تونیم کنترل کنیم وقتی مقداری روی پراپرتی ست شد، چه اتفاقی بیفته:

const person = { firstName: "Ali", lastName: "Rezaei", set fullName(name) { const parts = name.split(" "); this.firstName = parts[0]; this.lastName = parts[1]; } }; person.fullName = "Sara Ahmadi"; console.log(person.firstName); // Sara console.log(person.lastName); // Ahmadi

3️⃣ Getter + Setter با هم

const user = { firstName: "Ali", lastName: "Rezaei", get fullName() { return `${this.firstName} ${this.lastName}`; }, set fullName(name) { [this.firstName, this.lastName] = name.split(" "); } }; console.log(user.fullName); // Ali Rezaei user.fullName = "Mehdi Karimi"; console.log(user.firstName); // Mehdi

4️⃣ استفاده از Object.defineProperty

می‌تونیم به شکل دستی getter/setter بسازیم:

const car = { brand: "BMW", model: "X5" }; Object.defineProperty(car, "fullName", { get: function() { return this.brand + " " + this.model; }, set: function(value) { const parts = value.split(" "); this.brand = parts[0]; this.model = parts[1]; } }); console.log(car.fullName); // BMW X5 car.fullName = "Audi A7"; console.log(car.brand); // Audi

📌 چرا Accessors مهم‌اند؟

  • کپسوله‌سازی (Encapsulation): داده‌ها رو محافظت می‌کنه.

  • اعتبارسنجی (Validation): می‌تونیم قبل از ست کردن مقدار، اون رو چک کنیم.

  • پراپرتی‌های محاسباتی (Computed): پراپرتی‌ای که بر اساس بقیه مقادیر ساخته میشه.