مقدار "this" را تشریح کنید.
در کد زیر قصد داریم متد ()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
با توجه به موارد زیر.
-
متدی که داخل یک آبجکت معمولی بوده, اجرا شده.
-
به همین ترتیب, پرانتز در اینجا اولیت را عوض نمیکند و مهم نقطه
.
است. -
ما نمونه پیچیده تری نسبت به
()(expression)
. در زیر داریم که به دو خط کد تقسیم شده است:f = obj.go; // calculate the expression f(); // call what we have
اینجا
()f
به عنوان یک تابع, بدونthis
اجرا میشود. -
در موارد مشابه
(3)
, در سمت چپ پرانتز عبارت داریم.
برای اینکه اتفاقاتی که در مورد (3)
و (4)
رج میدهد را بدانیم, باید به خاطر داشته باشیم که دسترسی به مقدار ویژگی ها (چه با نقطه یا چه با استفاده از براکت) یک مقداری از Reference Type
هر عملیاتی که برروی آن غیر از توابع (مثل عملگر تخصیص =
یا ||
) اعمال میشود, از آن یک مقدار معمولی میسازد, که اطلاعاتی برای تنظیم مقدار this
ندارد.