کلمهٔ کلیدی This

از موتو کد، دانشنامهٔ برنامه‌نویسی


مثال[ویرایش | ویرایش]

var person = {
  firstName: "John",
  lastName : "Doe",
  id       : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};


مشاهدهٔ نتیجه


کلمه this چیست؟[ویرایش | ویرایش]

کلمه کلیدی this در جاوا اسکریپت به شیء ای که در آن قرار داد، اشاره می‌کند. [۱]

کلمه کلیدی this معانی مختلفی را با توجه به جایی که ازآن استفاده می‌شود، دارد:

در یک متد، کلمه کلیدی this، به شیء صاحب متد اشاره دارد.


کلمه this به تنهایی، به شیء کلی (global object) اشاره دارد.


در یک تابع، کلمه کلیدی this به شیء کلی (global object) اشاره دارد.


کلمه کلیدی this در حالت سخت‌گیرانه در یک تابع مقدار معنی undefined دارد.


در یک رویداد کلمه کلیدی this ، به عنصری که رویداد روی آن اتفاق افتاده‌است اشاره دارد.


متدهایی همچون Call() و apply() می‌توانند کلمه this را به هر شیءای ربط دهند.

کلمه کلیدی this در متد[ویرایش | ویرایش]

در یک متد در شیء، کلمه کلیدی this به شیء “صاحبمتد اشاره دارد.

درمثالی که در ابتدای این صفحه وجود دارد، کلمه کلیدی this به شیء person اشاره دارد.

شیء person صاحب متد fullName است.

fullName : function() {
  return this.firstName + " " + this.lastName;
}


مشاهدهٔ نتیجه


کلمه this به تنهایی[ویرایش | ویرایش]

زمانی که از کلمه this به تنهایی استفاده می‌کنید، owner (به فارسی: صاحب) شیء کلی است، بنابراین کلمه this به شیء کلی (global) اشاره دارد.

در پنجره مرورگر شیء کلی یا global برابر با [object Window]:

مثال[ویرایش | ویرایش]

var x = this;


مشاهدهٔ نتیجه


در حالت سخت‌گیرانه نیز، زمانی که از کلمه this به تنهایی استفاده می‌کنید، this به شیء کلی یا Global یعنی [object Window] اشاره دارد.

مثال[ویرایش | ویرایش]

"use strict";
var x = this;


مشاهدهٔ نتیجه


کلمه this در یک تابع (به صورت پیش فرض)[ویرایش | ویرایش]

در یک تابع جاوا اسکریپت، کلمه this به صاحب تابع اشاره دارد.

بنابراین، در یک تابع، کلمه کلیدی this به شیء کلی یا global یعنی [object Window] اشاره دارد.

مثال[ویرایش | ویرایش]

function myFunction() {
  return this;
}


مشاهدهٔ نتیجه


کلمه this در یک تابع (حالت سخت گیرانه (Strict))[ویرایش | ویرایش]

در حالت سخت‌گیرانه کلمه this جاوا اسکریپت، همانند وضعیت پیشفرض آن عمل نمی‌کند.

بنابراین زمانی که از این کلمه در حالت سخت‌گیرانه استفاده کنید، کلمه کلیدی this به undefined اشاره دارد.

مثال[ویرایش | ویرایش]

"use strict";
function myFunction() {
  return this;
}


مشاهدهٔ نتیجه


کلمه کلیدی this در مدیریت کننده رویدادها (Event Handlers)[ویرایش | ویرایش]

در ویژگی کنترل‌کننده رویداد در HTML ، کلمه کلیدی this به عنصری از HTML اشاره دارد که رویداد را دریافت می‌کند (روی آن کنترل رویدادی اتفاق می‌افتد):

مثال[ویرایش | ویرایش]

<button onclick="this.style.display='none'">
  Click to Remove Me!
</button>


مشاهدهٔ نتیجه


اشاره به شیء متد[ویرایش | ویرایش]

در این مثال‌ها، کلمه کلیدی this به شیء person اشاره دارد. (شیء person، شیء “صاحب” تابع است):

مثال[ویرایش | ویرایش]

var person = {
  firstName  : "John",
  lastName   : "Doe",
  id         : 5566,
  myFunction : function() {
    return this;
  }
};


مشاهدهٔ نتیجه


مثال[ویرایش | ویرایش]

var person = {
  firstName: "John",
  lastName : "Doe",
  id       : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};


مشاهدهٔ نتیجه


به تعبیری دیگر: this.firstname به معنای ویژگی این (شیء person) است.

اشاره به تابع بصورت Explicit[ویرایش | ویرایش]

متدهای call() و Apply() متدهای از پیش تعریف شده جاوا اسکریپت هستند.

از هر دوی این متدها می‌توان برای فراخوانی یک متد از یک شیء، با شیء دیگر به عنوان آرگومان استفاده کرد.

شما بعدا در مورد متدهای call() و Apply() مطالب بیشتری را در این آموزش خواهید آموخت.

در مثال زیر، هنگام فراخوانی person1.fullName با شیء person2 به عنوان آرگومان، کلمه کلیدی this به شیء person2 اشاره دارد درحالی که متد فراخوانی شده متعلق به شیء person1 است:

مثال[ویرایش | ویرایش]

var person1 = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}
var person2 = {
  firstName:"John",
  lastName: "Doe",
}
person1.fullName.call(person2);  // Will return "John Doe"


مشاهدهٔ نتیجه


منابع آموزشی[ویرایش]