متدهای شیء (Object Methods) در جاوا اسکریپت — به زبان ساده

۱۱۴۴ بازدید
آخرین به‌روزرسانی: ۰۸ شهریور ۱۴۰۲
زمان مطالعه: ۵ دقیقه
متدهای شیء (Object Methods) در جاوا اسکریپت — به زبان ساده

یک شی در مفهوم کلاس در برنامه نویسی نمود دارد. اشیا در جاوا اسکریپت مجموعه‌ای از جفت‌های کلید/مقدار هستند. این مقادیر می‌توانند شامل مشخصات و متدها باشند و همچنین ممکن است شامل انواع داده دیگر جاوا اسکریپت مانند رشته‌ها، اعداد و مقادیر بولی باشند. همه اشیا در جاوا اسکریپت از سازنده (Constructor) برای Object والد ساخته می‌شوند. این Object متدهای داخلی بسیار مفیدی دارد که می‌توانیم برای دسترسی به آن استفاده کنیم و اشیای دیگر مفیدی بسازیم. برخلاف متدهای پروتوتایپ آرایه مانند ()sort و ()reverse که در وهله‌های آرایه مورد استفاده قرار می‌گیرند، متدهای شیء به طور مستقیم روی سازنده شیء استفاده می‌شوند و از وهله شیء به عنوان یک پارامتر استفاده می‌شود. این روش به نام متد استاتیک خوانده می‌شود.

در این راهنما متدهای مهم داخلی شیء جاوا اسکریپت را بررسی می‌کنیم. در هر یک از بخش‌هایی که در ادامه ارائه شده یک متد خاص بررسی می‌شود و نمونه‌ای از کاربرد آن توضیح داده می‌شود.

پیش‌نیازها

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

برای این که به طور کلی اطلاعات بیشتری در مورد جاوا اسکریپت به دست آورید، می‌توانید از این آموزش استفاده کنید.

()Object.create

متد ()Object.create برای ایجاد یک شیء جدید و پیوند دادن آن به پروتوتایپ یک شیء موجود استفاده می‌شود. ما می‌توانیم یک وهله از شیء job را ایجاد کرده و آن را به شیء خاصی بسط دهیم:

// Initialize an object with properties and methods
const job = {
    position: 'cashier',
    type: 'hourly',
    isAvailable: true,
    showDetails() {
        const accepting = this.isAvailable ? 'is accepting applications' : "is not currently accepting applications";

        console.log(`The ${this.position} position is ${this.type} and ${accepting}.`);
    }
};

// Use Object.create to pass properties
const barista = Object.create(job);

barista.position = "barista";
barista.showDetails();

خروجی

The barista position is hourly and is accepting applications.

شیء barista اینک یک خصوصیت به نام «position» دارد؛ اما همه خصوصیات و متدهای دیگر مربوط به job هستند که از طریق پروتوتایپ در دسترس هستند. ()Object.create برای کدنویسی DRY از طریق کاهش کپی‌ها مفید است. کدنویسی DRY (اختصاری برای do not repeat yourself) مفهومی در زمینه توسعه نرم‌افزار است که هدف آن کاهش تکرار الگوهای کد، استفاده بیشتر از تجرید و اجتناب از افزونگی است.

()Object.keys

متد ()Object.keys یک آرایه ایجاد می‌کند که حاوی کلیدهای یک شیء است. ما می‌توانیم یک شیء را ایجاد کرده و آرایه‌های کلیدها را نمایش دهیم.

// Initialize an object
const employees = {
    boss: 'Michael',
    secretary: 'Pam',
    sales: 'Jim',
    accountant: 'Oscar'
};

// Get the keys of the object
const keys = Object.keys(employees);

console.log(keys);

خروجی

["boss", "secretary", "sales", "accountant"]

متد Object.keys می‌تواند در یک حلقه قرار گیرد و کلیدها و مقادیر یک شیء را استخراج کند.

// Iterate through the keys
Object.keys(employees).forEach(key => {
    let value = employees[key];

     console.log(`${key}: ${value}`);
});

خروجی

boss: Michael
secretary: Pam
sales: Jim
accountant: Oscar

Object.keys برای بررسی طول یک شیء نیز مفید است.

// Get the length of the keys

const length = Object.keys(employees).length;

console.log(length);

خروجی

4

ما با استفاده از خصوصیت length می‌توانیم 4 خصوصیت employees را بشماریم.

()Object.values

متد ()Object.values آرایه‌ای ایجاد می‌کند که حاوی مقادیری برای یک شیء است.

// Initialize an object
const session = {
    id: 1,
    time: `26-July-2018`,
    device: 'mobile',
    browser: 'Chrome'
};

// Get all values of the object
const values = Object.values(session);

console.log(values);

خروجی

[1, "26-July-2018", "mobile", "Chrome"]

متدهای ()Object.values و ()Object.values امکان بازگشت داده‌ها از اشیا را فراهم می‌سازند.

()Object.entries

متد ()Object.entries یک آرایه تودرتو از جفت‌های کلید/مقدار یک شیء ایجاد می‌کند.

// Initialize an object
const operatingSystem = {
    name: 'Ubuntu',
    version: 18.04,
    license: 'Open Source'
};

// Get the object key/value pairs
const entries = Object.entries(operatingSystem);

console.log(entries);

خروجی

[
    ["name", "Ubuntu"]
    ["version", 18.04]
    ["license", "Open Source"]
]

زمانی که آرایه‌هایی از جفت کلید/مقدار داشته باشیم، می‌توانیم از متد ()forEach برای تعریف حلقه‌ای روی آن استفاده کرده و نتایج مورد نظر خودمان را استخراج کنیم.

// Loop through the results
entries.forEach(entry => {
    let key = entry[0];
    let value = entry[1];

    console.log(`${key}: ${value}`);
});

خروجی

name: Ubuntu

version: 18.04

license: Open Source

متد ()Object.entries تنها خصوصیات خود وهله شیء را باز می‌گرداند و نه خصوصیاتی که ممکن است از پروتوتایپش به ارث برده باشد.

()Object.assign

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

// Initialize an object
const name = {
    firstName: 'Philip',
    lastName: 'Fry'
};

// Initialize another object
const details = {
    job: 'Delivery Boy',
    employer: 'Planet Express'
};

// Merge the objects
const character = Object.assign(name, details);

console.log(character);

خروجی

{firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}

همچنین این امکان وجود دارد که از عملگر اسپرد (...) برای اجرای این وظیفه استفاده کرد. در کد زیر ما روش اعلان character را از طریق ادغام شیءهای name و details تغییر داده‌ایم.

// Initialize an object
const name = {
    firstName: 'Philip',
    lastName: 'Fry'
};

// Initialize another object
const details = {
    job: 'Delivery Boy',
    employer: 'Planet Express'
};

// Merge the object with the spread operator
const character = {...name, ...details}

console.log(character);

خروجی

{firstName: "Philip", lastName: "Fry", job: "Delivery Boy", employer: "Planet Express"}

ساختار اسپرد در ادبیات واژگان مربوط به اشیا به نام کلون کردن سطحی نیز نامیده می‌شود.

()Object.freeze

متد ()Object.freeze از تغییر یافتن خصوصیات و مقادیر یک شیء جلوگیری می‌کند و امکان افزودن یا حذف شدن خصوصیات از شیء سلب می‌شود.

// Initialize an object
const user = {
    username: 'AzureDiamond',
    password: 'hunter2'
};

// Freeze the object
const newUser = Object.freeze(user);

newUser.password = '*******';
newUser.active = true;

console.log(newUser);

خروجی

{username: "AzureDiamond", password: "hunter2"}

در مثال فوق تلاش کردیم تا رمز عبور hunter2 را با ****** جایگزین کنیم؛ اما خصوصیت password بدون تغییری باقی ماند. همچنین تلاش کردیم تا یک خصوصیات جدید به نام active اضافه کنیم که آن نیز اضافه نشد.

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

()Object.seal

متد ()Object.seal از اضافه شدن خصوصیتی به شیء جلوگیری می‌کند،؛ اما امکان تغییر خصوصیات موجود را ارائه می‌کند. این متد مشابه ()Object.freeze است. پیش از پیاده‌سازی کد زیر، کنسول خود را رفرش کنید تا از بروز خطا جلوگیری شود.

// Initialize an object

const user = {

username: 'AzureDiamond',

password: 'hunter2'

};

// Seal the object

const newUser = Object.seal(user);

newUser.password = '*******';

newUser.active = true;

console.log(newUser);

خروجی

{username: "AzureDiamond", password: "*******"}

خصوصیت active جدید به شیء انتخابی افزوده نشده است؛ اما خصوصیت password با موفقیت تغییر یافته است.

()Object.getPrototypeOf

متد ()Object.getPrototypeOf برای دریافت خصوصیت [[Prototype]] که درون شیء به صورت داخلی پنهان شده است استفاده می‌شود. این خصوصیت از طریق خصوصیت __proto__ نیز در دسترس است.

در این مثال می‌توانیم یک آرایه ایجاد کنیم که به پروتوتایپ Array دسترسی داشته باشد.

const employees = ['Ron', 'April', 'Andy', 'Leslie'];

Object.getPrototypeOf(employees);

خروجی

[constructor: ƒ, concat: ƒ, find: ƒ, findIndex: ƒ, pop: ƒ, …]

در خروجی فوق می‌بینیم که پروتوتایپ آرایه employees به pop، find و دیگر متدهای پروتوتایپ آرایه دسترسی دارد. می‌توانیم این مسئله را با تست کردن پروتوتایپ employees با Array.prototype تأیید کنیم.

Object.getPrototypeOf(employees) === Array.prototype;

خروجی

True

این متد برای دریافت اطلاعات بیشتر در مورد یک شیء یا تضمین این که به پروتوتایپ شیء دیگر دسترسی دارد مفید است.

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

نتیجه‌گیری

اشیا متدهای مفیدی دارند که به ما کمک می‌کند تا آن‌ها را اصلاح کرده، محافظت کنیم یا حلقه‌ای روی آن‌ها تعریف کنیم. در این راهنما شیوه ایجاد و انتساب اشیای جدید، تعریف حلقه روی کلیدها و/یا مقادیر یک شیء را بررسی کردیم و یک شیء را فریز یا مهروموم کردیم.

اگر این نوشته مورد توجه شما واقع شده، پیشنهاد می‌کنیم موارد زیر را نیز بررسی کنید:

==

بر اساس رای ۸ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
digitalocean
۱ دیدگاه برای «متدهای شیء (Object Methods) در جاوا اسکریپت — به زبان ساده»

درود بر شما، آقای لطفی مطالب رو دقیق و خوب ارائه میکنید .

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *