Object Management

🔹 ۱. ساخت و تعریف شیء

به دو روش اصلی:

// Object Literal const user = { name: "Ali", age: 25 }; // Constructor const user2 = new Object(); user2.name = "Sara"; user2.age = 30;

🔹 ۲. مدیریت کلیدها و مقدارها

اضافه / تغییر مقدار:

user.city = "Tehran"; // اضافه کردن user.age = 26; // تغییر مقدار

حذف کلید:

delete user.city;

بررسی وجود کلید:

console.log("name" in user); // true console.log(user.hasOwnProperty("age")); // true

🔹 ۳. قفل و فریز کردن اشیاء

جلوگیری از اضافه/حذف پراپرتی → ()Object.seal

const car = { brand: "BMW", model: "X5" }; Object.seal(car); car.brand = "Audi"; // مجاز (تغییر مقدار) delete car.model; // ❌ خطا (در حالت strict) car.color = "red"; // ❌ اضافه نمی‌شود

غیرقابل تغییر کامل → ()Object.freeze

const book = { title: "JS", price: 100 }; Object.freeze(book); book.price = 200; // ❌ تغییر نمی‌کند delete book.title; // ❌ حذف نمی‌شود

بررسی وضعیت شیء:

Object.isSealed(car); // true Object.isFrozen(book); // true

🔹 ۴. کپی و ادغام اشیاء

سطحی (Shallow Copy)

const obj1 = { a: 1, b: 2 }; const copy = Object.assign({}, obj1); const spreadCopy = { ...obj1 }; // با Spread Operator

ادغام چند آبجکت

const obj2 = { c: 3 }; const merged = { ...obj1, ...obj2 }; console.log(merged); // {a:1, b:2, c:3}

🔹 ۵. دستکاری ویژگی‌ها (Property Descriptors)

با Object.defineProperty می‌تونی ویژگی‌های یک پراپرتی رو کنترل کنی (قابل نوشتن، قابل شمارش بودن، ...).

const person = {}; Object.defineProperty(person, "name", { value: "Ali", writable: false, // قابل تغییر نیست enumerable: true, // در حلقه‌ها میاد configurable: false // قابل حذف نیست }); console.log(person.name); // Ali person.name = "Sara"; // ❌ تغییر نمی‌کند

🔹 ۶. بدست آوردن کلیدها و مقادیر

Object.keys(user); // ["name","age"] Object.values(user); // ["Ali",25] Object.entries(user); // [["name","Ali"],["age",25]]

🔹 ۷. مدیریت وراثت (Prototype)

می‌توانی Prototype یک شیء رو تغییر بدی یا بسازی:

const animal = { eats: true }; const dog = Object.create(animal); dog.bark = true; console.log(dog.eats); // true (از animal به ارث برده)

📌 خلاصه

  • اضافه/حذف/تغییر: با دستکاری مستقیم پراپرتی‌ها.

  • محافظت از شیء: با seal و freeze.

  • کپی و ادغام: با Object.assign و Spread.

  • کنترل سطح پایین: با defineProperty.

  • وراثت: با Prototype و Object.create.