بازگشت به درس

مقدار "this" را تشریح کنید.

اهمیت: 3

در کد زیر قصد داریم متد ()obj.go را در 4 موقعیت مختلف اجرا کنیم.

ولی پاسخ موقعیت (1) و (2) با موقعیت (3) و (4) متفاوت است. چرا؟

let obj, method;

obj = {
  go: function() { alert(this); }
};

obj.go();               // (1) [object Object]

(obj.go)();             // (2) [object Object]

(method = obj.go)();    // (3) undefined

(obj.go || obj.stop)(); // (4) undefined

با توجه به موارد زیر.

  1. متدی که داخل یک آبجکت معمولی بوده, اجرا شده.

  2. به همین ترتیب, پرانتز در اینجا اولیت را عوض نمیکند و مهم نقطه . است.

  3. ما نمونه پیچیده تری نسبت به ()(expression). در زیر داریم که به دو خط کد تقسیم شده است:

    f = obj.go; // calculate the expression
    f();        // call what we have

    اینجا ()f به عنوان یک تابع, بدون this اجرا میشود.

  4. در موارد مشابه (3), در سمت چپ پرانتز عبارت داریم.

برای اینکه اتفاقاتی که در مورد (3) و (4) رج میدهد را بدانیم, باید به خاطر داشته باشیم که دسترسی به مقدار ویژگی ها (چه با نقطه یا چه با استفاده از براکت) یک مقداری از Reference Type

هر عملیاتی که برروی آن غیر از توابع (مثل عملگر تخصیص = یا ||) اعمال میشود, از آن یک مقدار معمولی میسازد, که اطلاعاتی برای تنظیم مقدار this ندارد.