اشیاء
مدلکردن موجودیتهای دنیای واقعی با شیء در جاوااسکریپت؛ دسترسی به ویژگیها، متدها و this و ساختارهای تودرتو.
آنچه در این درس میآموزید
- شیء بسازید و با نقطه و براکت به ویژگیهای آن دسترسی داشته باشید
- ویژگیهای شیء را بخوانید، تغییر دهید و ویژگی جدید بیفزایید
- متد بنویسید و با this به ویژگیهای همان شیء دسترسی پیدا کنید
فهرست مطالب
آرایه مجموعهای مرتب از مقادیر همنوع است؛ اما بیشتر دادههای واقعی چندبخشیاند. یک کاربر فقط «نام» نیست: نام، ایمیل و تاریخ عضویت دارد. برای گروهکردن چنین دادههایی با برچسبهای معنادار، جاوااسکریپت «شیء» (Object) دارد؛ محفظهای که هر عضو آن با یک نام — «ویژگی» (Property) — دسترسیپذیر است. شیء ستون فقرات جاوااسکریپت است؛ تا پایان دوره هرچه میسازید، در بخشی از آن با شیء سر و کار دارید.
ساخت شیء و دسترسی به ویژگیها
const person = {
name: "Negar",
age: 28,
city: "Tehran",
};
console.log(person.name);
console.log(person["age"]);Negar 28
شیء داخل آکولاد نوشته میشود؛ هر ویژگی از یک نام و یک مقدار با : بینشان ساخته میشود. دو راه دسترسی دارید:
- نقطه:
person.name— کوتاه و رایج؛ هر وقت نام ویژگی را میدانید از این استفاده کنید. - براکت:
person["age"]— نام را بهصورت رشته میگیرد؛ وقتی نام ویژگی در متغیری است یا کاراکتر خاصی دارد، تنها راه است.
دقت کنید متغیر person با const ساخته شد ولی مثل آرایهها، تغییر محتوای داخلی مجاز است؛ const فقط جایگزینی کل شیء را میبندد.
خواندن، تغییر و افزودن ویژگی
const book = {
title: "The Alchemist",
pages: 240,
};
book.pages = 248;
book.author = "Paulo Coelho";
console.log(book);{ title: 'The Alchemist', pages: 248, author: 'Paulo Coelho' }
با انتساب ساده هم ویژگیِ موجود عوض میشود هم ویژگیِ تازه ساخته میشود؛ book.author از همان لحظهٔ انتساب بخشی از شیء است. دسترسی به ویژگیای که وجود ندارد مقدار undefined میدهد: book.isbn خطا نیست، فقط undefined است.
متدها و this
وقتی مقدار یک ویژگی تابع باشد، به آن «متد» (Method) میگویند. متد رفتار شیء است و اغلب باید به دادههای خودِ شیء برسد؛ کلیدواژهٔ this داخل متد به همان شیء اشاره میکند:
const circle = {
radius: 5,
area() {
return 3.14 * this.radius ** 2;
},
};
console.log(circle.area());78.5
this.radius یعنی «شعاعِ همین شیء». نوشتن radius تنها بهجای this.radius به متغیر بیرونی اشاره میکرد، نه ویژگی شیء. فراخوانی متد با نقطه انجام میشود: circle.area().
ساختارهای تودرتو
ویژگیهای شیء میتوانند هر مقداری باشند؛ حتی آرایه یا شیء دیگر. این ترکیب، مدل واقعی دادههاست:
const student = {
name: "Hossein",
scores: [18, 15, 20],
address: {
city: "Isfahan",
},
};
console.log(student.scores[1]);
console.log(student.address.city);15 Isfahan
زنجیرهٔ دسترسی ادامه دارد تا به مقدار نهایی برسد: student.scores[1] اول به آرایهٔ نمرهها میرسد و عنصر دومش را برمیدارد؛ student.address.city از میان شیء تودرتو عبور میکند. همین ساختارها را در درسهای بعدی از پاسخهای شبکه و عناصر صفحه هم دریافت خواهید کرد.
تمرینها
تمرین
تمرین ۱ — نام کامل
شیءای به نام user بسازید که ویژگیهای firstName و lastName داشته باشد و متدی به نام fullName تعریف کنید که نام و نامخانوادگی را با یک فاصله کنار هم برگرداند. سپس آن را فراخوانی و چاپ کنید.
// Write your code hereنمایش راهحل
const user = {
firstName: "Leila",
lastName: "Mohammadi",
fullName() {
return `${this.firstName} ${this.lastName}`;
},
};
console.log(user.fullName());Leila Mohammadi
::: :::
خلاصه
- شیء محفظهای از جفتهای نام و مقدار است؛ هر نام یک ویژگی آن است.
- دسترسی با نقطه (
person.name) یا براکت (person["age"]) انجام میشود؛ ویژگی ناموجودundefinedمیدهد. - با انتساب، ویژگی تغییر یا ویژگی تازه ساخته میشود؛ حتی روی شیء
const. - متد ویژگیای است که تابع است و با
thisبه دادههای همان شیء دسترسی دارد. - آرایهها و اشیاء میتوانند تودرتو شوند و زنجیرهٔ نقطهها و براکتها تا مقدار نهایی ادامه مییابد.
داده را بلدیم؛ نوبت صفحه است. در درس بعدی وارد مرورگر میشویم و با مدل شیء سند (DOM) عناصر HTML را با جاوااسکریپت انتخاب و تغییر میدهیم.