یک Method در واقع تابعی (Function) است که به یک Object متصل شده است؛ به عبارت دیگر، متد همان Property یک Object است که مقدار آن یک Function باشد. متدها دقیقاً مانند توابع معمولی تعریف میشوند، با این تفاوت که باید به عنوان یک ویژگی به یک شیء اختصاص داده شوند.
به عنوان مثال، به روشهای زیر میتوان یک متد را تعریف کرد:
objectName.methodName = functionName;
const myObj = {
myMethod: function (params) {
// انجام یک کار مشخص
},
// این سینتکس کوتاهتر هم دقیقاً همین کار را میکند!
myOtherMethod(params) {
// انجام یک کار دیگر
},
};
در ساختار بالا، objectName یک شیء موجود، methodName نامی است که به متد اختصاص میدهید و functionName نام تابع است.
سپس میتوانید این متد را در بافتار (Context) آن شیء به صورت زیر فراخوانی کنید:
objectName.methodName(params);
متدها معمولاً روی شیء پروتیپِ تابع سازنده (Prototype object of the constructor) تعریف میشوند تا همه اشیاء از یک نوع، یک متد یکسان را به اشتراک بگذارند و از آن استفاده کنند. به عنوان مثال، میتوانید تابعی تعریف کنید که ویژگیهای اشیاء Car (که قبلاً دیدیم) را فرمتدهی کرده و نمایش دهد:
Car.prototype.displayCar = function () {
const result = `A Beautiful ${this.year} ${this.make} ${this.model}`;
console.log(result);
};
به استفاده از کلمه کلیدی this برای ارجاع به شیئی که متد به آن تعلق دارد، توجه کنید. حالا میتوانید متد displayCar را برای هر یک از اشیاء به شکل زیر صدا بزنید:
car1.displayCar();
car2.displayCar();
this برای ارجاع به اشیاءجاوااسکریپت یک کلمه کلیدی ویژه به نام this دارد که میتوانید از آن در داخل یک متد برای اشاره به «شیء فعلی» استفاده کنید.
برای مثال، فرض کنید دو شیء به نامهای manager و intern دارید. هر Object نام، سن و شغل مخصوص به خود را دارد. در تابع ()sayHi به کاربرد this.name دقت کنید. وقتی این تابع را به هر دو شیء اضافه میکنیم، یک تابع واحد، پیام خوشآمدگویی را با نامِ همان شیئی چاپ میکند که به آن متصل شده است:
const manager = {
name: "Karina",
age: 27,
job: "Software Engineer",
};
const intern = {
name: "Tyrone",
age: 21,
job: "Software Engineer Intern",
};
function sayHi() {
console.log(`Hello, my name is ${this.name}`);
}
// اضافه کردن تابع sayHi به هر دو شیء
manager.sayHi = sayHi;
intern.sayHi = sayHi;
manager.sayHi(); // خروجی: Hello, my name is Karina
intern.sayHi(); // خروجی: Hello, my name is Tyrone
در واقع this یک «پارامتر پنهان» (Hidden parameter) در فراخوانی توابع است و مقدار آن با مشخص کردن شیءِ قبل از نام تابع تعیین میشود. به عنوان مثال، در عبارت ()manager.sayHi، مقدار this همان شیء manager است، چون کلمه manager قبل از تابع sayHi آمده است.
اگر از طریق یک شیء دیگر به همین تابع دسترسی پیدا کنید، مقدار this نیز متناسب با آن تغییر خواهد کرد. همچنین اگر از روشهای دیگری برای فراخوانی تابع استفاده کنید (مانند متدهای Function.prototype.call() یا Reflect.apply())، میتوانید مقدار this را به صورت صریح و مستقیم به عنوان یک آرگومان به تابع پاس دهید.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript