javascript-objects-guide_آکادمی تخصصی ریسمان
تاریخ انتشار :
میانگین: 5.0

راهنمای کامل کار با اشیاء (Objects) در جاوا اسکریپت

اشیاء (Objects) در جاوا اسکریپت یکی از مهم‌ترین مفاهیم این زبان برنامه‌نویسی محسوب می‌شوند. این ساختار داده‌ای قدرتمند، امکان ذخیره و مدیریت داده‌ها را به روشی سازمان‌یافته فراهم می‌کند. در این مقاله، نحوه ایجاد، تغییر، حذف و مدیریت اشیاء در جاوا اسکریپت را با مثال‌های کاربردی بررسی خواهیم کرد. همچنین با متدهای پیشرفته‌ای مانند Object.keys()، Object.values() و Object.entries() آشنا می‌شوید. اگر به دنبال یادگیری عمیق‌تر کار با اشیاء هستید، این راهنما برای شماست!

Share
Pin
Like
Send
Share
Send
Send
Share

 

مقدمه

جاوا اسکریپت یک زبان برنامه‌نویسی شیء‌گرا محسوب می‌شود، و اشیاء (Objects) یکی از مهم‌ترین اجزای آن هستند. اگر تا به حال با داده‌های پیچیده‌ای کار کرده باشید، حتماً متوجه شده‌اید که ذخیره آن‌ها در متغیرهای ساده مثل string یا number کافی نیست. اینجاست که اشیاء وارد عمل می‌شوند. اما اشیاء دقیقاً چیستند و چگونه کار می‌کنند؟ بیایید این موضوع را بررسی کنیم.

اشیاء در جاوا اسکریپت چیست؟

اشیاء در جاوا اسکریپت نوعی داده هستند که می‌توانند مجموعه‌ای از ویژگی‌ها (properties) و متدها (methods) را در خود جای دهند. ویژگی‌ها همان متغیرها و مقادیر داخل شیء هستند، در حالی که متدها توابعی هستند که روی آن شیء اعمال می‌شوند.

نحوه ایجاد اشیاء در جاوا اسکریپت

روش‌های مختلفی برای ایجاد اشیاء در جاوا اسکریپت وجود دارد:

1. استفاده از نشانه‌گذاری شیء (Object Literal)

let person = {
  name: "علی",
  age: 25,
  job: "برنامه‌نویس"
};

2. استفاده از تابع سازنده (Constructor Function)

function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
}
let ali = new Person("علی", 25, "برنامه‌نویس");

3. استفاده از کلاس‌ها (ES6 Classes)

class Person {
  constructor(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
  }
}
let sara = new Person("سارا", 22, "طراح");

4. استفاده از Object.create()

let personPrototype = {
  greet: function() {
    console.log("سلام، من " + this.name + " هستم!");
  }
};
let ali = Object.create(personPrototype);
ali.name = "علی";

دسترسی به مقادیر اشیاء

1. استفاده از نقطه (Dot Notation)

console.log(person.name);

2. استفاده از براکت (Bracket Notation)

console.log(person["age"]);

افزودن، ویرایش و حذف ویژگی‌های اشیاء

برای افزودن ویژگی جدید:
 

person.city = "تهران";

برای تغییر مقدار ویژگی:
 

person.age = 30;

برای حذف ویژگی:
 

delete person.job;

متدهای اشیاء و استفاده از this
 

let person = {
  name: "علی",
  greet: function() {
    console.log("سلام، من " + this.name + " هستم!");
  }
};
person.greet();

حلقه‌ها و اشیاء در جاوا اسکریپت

1. استفاده از for...in برای پیمایش اشیاء
 

for (let key in person) {
  console.log(key + ": " + person[key]);
}

2. استفاده از Object.keys(), Object.values() و Object.entries()

console.log(Object.keys(person)); // دریافت کلیدها
console.log(Object.values(person)); // دریافت مقادیر
console.log(Object.entries(person)); // دریافت کلیدها و مقادیر

مقایسه اشیاء در جاوا اسکریپت

1. مقایسه مستقیم (== و ===)
 

let obj1 = { name: "علی" };
let obj2 = { name: "علی" };
console.log(obj1 === obj2); // false

2. استفاده از JSON.stringify() برای مقایسه اشیاء

console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true

شیء سازی در جاوا اسکریپت (Prototypes)

1. مفهوم Prototype و اهمیت آن
 

Person.prototype.sayHello = function() {
  console.log("سلام " + this.name);
};
ali.sayHello();

شیء اینترفیس در جاوا اسکریپت

1. کپی کردن اشیاء با Object.assign
 

let newPerson = Object.assign({}, person);

2. جلوگیری از تغییر اشیاء با Object.freeze و Object.seal

Object.freeze(person);
person.age = 40; // مقدار تغییر نمی‌کند

 

شیوه‌های پیشرفته ایجاد و مدیریت اشیاء در جاوا اسکریپت 

۱. استفاده از Object.create() برای ایجاد اشیاء

یکی از روش‌های پیشرفته برای ایجاد اشیاء در جاوا اسکریپت، استفاده از Object.create() است. این روش به شما امکان می‌دهد یک شیء جدید بسازید که از یک شیء دیگر به عنوان پروتوتایپ خود استفاده می‌کند.

const person = {
  greet: function () {
    console.log(`سلام، من ${this.name} هستم!`);
  },
};

const user = Object.create(person);
user.name = "علی";
user.greet(); // خروجی: سلام، من علی هستم!

با این روش، user متد greet را از person به ارث می‌برد، که این موضوع در بهینه‌سازی حافظه و ساختار برنامه اهمیت دارد.

۲. ایجاد اشیاء با استفاده از Object.assign()

گاهی اوقات نیاز دارید که مقادیر چند شیء را در یک شیء جدید ادغام کنید. برای این کار، متد Object.assign() بسیار مفید است.

const obj1 = { name: "رضا" };
const obj2 = { age: 25 };
const merged = Object.assign({}, obj1, obj2);

console.log(merged); // { name: "رضا", age: 25 }

با این روش، می‌توان به راحتی چندین شیء را ترکیب کرده و مدیریت داده‌ها را آسان‌تر کرد.

۳. مدیریت پیشرفته ویژگی‌های شیء با Object.defineProperty()

در برخی مواقع نیاز است که ویژگی‌های یک شیء را کنترل کنیم. متد Object.defineProperty() این امکان را فراهم می‌کند تا مشخص کنیم که یک ویژگی قابل تغییر یا قابل مشاهده باشد یا خیر.

const product = {};
Object.defineProperty(product, "price", {
  value: 1000,
  writable: false, // نمی‌توان مقدار را تغییر داد
  enumerable: true, // این ویژگی در لیست حلقه‌ها نمایش داده شود
});

console.log(product.price); // 1000
product.price = 2000; // تغییر انجام نمی‌شود
console.log(product.price); // همچنان 1000

این ویژگی در مدیریت داده‌های حساس بسیار کاربردی است.

بررسی دقیق‌تر متدهای مهم کار با اشیاء 

۱. متد Object.keys() برای دریافت کلیدهای یک شیء

متد Object.keys() تمام کلیدهای یک شیء را به صورت آرایه برمی‌گرداند که برای پیمایش داده‌ها بسیار کاربردی است.

const user = { name: "محمد", age: 30, city: "تهران" };
console.log(Object.keys(user)); // ["name", "age", "city"]

۲. متد Object.values() برای دریافت مقادیر ویژگی‌های شیء

برای دریافت مقادیر یک شیء، متد Object.values() استفاده می‌شود.

console.log(Object.values(user)); // ["محمد", 30, "تهران"]

۳. متد Object.entries() برای تبدیل اشیاء به آرایه‌ای از زوج‌های کلید-مقدار

گاهی نیاز است که یک شیء را به یک آرایه قابل پردازش تبدیل کنیم.

console.log(Object.entries(user)); 
// [["name", "محمد"], ["age", 30], ["city", "تهران"]]

۴. استفاده از Object.freeze() برای قفل کردن شیء

با Object.freeze() می‌توان از تغییر ویژگی‌های یک شیء جلوگیری کرد.

const settings = { theme: "dark", language: "fa" };
Object.freeze(settings);
settings.theme = "light"; // تغییر انجام نمی‌شود
console.log(settings.theme); // "dark"

این متد برای جلوگیری از تغییر تنظیمات حساس بسیار مفید است.

مکمل سوم: کار با this و نحوه بایند کردن آن در اشیاء جاوا اسکریپت (هفته سوم)

۱. مفهوم this در اشیاء جاوا اسکریپت

کلمه کلیدی this در جاوا اسکریپت به شیئی اشاره می‌کند که در آن اجرا شده است. در اشیاء، معمولاً به خود شیء اشاره دارد.

const user = {
  name: "زهرا",
  sayHello: function () {
    console.log(`سلام، من ${this.name} هستم!`);
  },
};
user.sayHello(); // سلام، من زهرا هستم!

۲. مشکل this در توابع تو در تو

وقتی از توابع تو در تو در اشیاء استفاده می‌کنید، this ممکن است رفتار غیرمنتظره‌ای داشته باشد.

const user = {
  name: "مینا",
  sayHello: function () {
    setTimeout(function () {
      console.log(`سلام، من ${this.name} هستم!`);
    }, 1000);
  },
};
user.sayHello(); // خروجی: سلام، من undefined هستم!

۳. حل مشکل this با bind()

یکی از راه‌های حل این مشکل استفاده از bind() است.

const user = {
  name: "مینا",
  sayHello: function () {
    setTimeout(
      function () {
        console.log(`سلام، من ${this.name} هستم!`);
      }.bind(this),
      1000
    );
  },
};
user.sayHello(); // خروجی: سلام، من مینا هستم!

۴. استفاده از arrow function برای حل مشکل this

راه دیگر استفاده از تابع‌های پیکانی (arrow functions) است که مقدار this را از محیط بالاتر به ارث می‌برند.

const user = {
  name: "مینا",
  sayHello: function () {
    setTimeout(() => {
      console.log(`سلام، من ${this.name} هستم!`);
    }, 1000);
  },
};
user.sayHello(); // خروجی: سلام، من مینا هستم!

این روش باعث خوانایی و کارایی بیشتر کد می‌شود.

نتیجه‌گیری

در این مقاله، با اشیاء در جاوا اسکریپت آشنا شدیم و روش‌های مختلف ایجاد، تغییر و استفاده از آن‌ها را بررسی کردیم. اشیاء بخش حیاتی جاوا اسکریپت هستند که به ما امکان مدیریت بهتر داده‌ها را می‌دهند.

پرسش و پاسخ

1 . چرا اشیاء در جاوا اسکریپت اهمیت دارند؟
اشیاء امکان ذخیره و مدیریت بهتر داده‌ها را فراهم می‌کنند.

2 . چه تفاوتی بین آرایه‌ها و اشیاء در جاوا اسکریپت وجود دارد؟
آرایه‌ها برای داده‌های مرتب شده مناسب‌اند، اما اشیاء برای داده‌های پیچیده و غیرمرتبط استفاده می‌شوند.

3 . چگونه می‌توان ویژگی‌های یک شیء را حذف کرد؟
با استفاده از delete object.property می‌توان ویژگی را حذف کرد.

4 . چگونه می‌توان متدهای جدیدی به یک شیء اضافه کرد؟
با استفاده از prototype یا افزودن مستقیم متد به شیء.

5 . Prototype در جاوا اسکریپت چه کاربردی دارد؟
امکان اضافه کردن متدها و ویژگی‌های جدید به تمامی نمونه‌های یک کلاس را فراهم می‌کند.

دیدگاه ها

برای ارسال دیدگاه وارد حساب کاربری خود شوید.