You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/99-js-misc/04-reference-type/article.md
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,7 +26,7 @@ user.hi(); // کار میکند!
26
26
*/!*
27
27
```
28
28
29
-
در خط آخر ما شرط سه تایی (تک خطی) را داریم که براساس true یا false بودن مقدار `user.name` مشخص میشود که آیا متد `user.hi` اجرا میشود یا `user.bye`. نتیجه درست است و `user.hi` برگردانده میشود ولی چون متد پرانتز ندارد درهنگام اجرا با مشکل روبرو خواهیم بود.
29
+
در خط آخر ما شرط سه تایی (تک خطی) را داریم که براساس true یا false بودن مقدار `user.name` مشخص میشود که آیا متد `user.hi` اجرا میشود یا `user.bye`. نتیجه true است و `user.hi` برگردانده میشود, ولی چون متد پرانتز ندارد درهنگام اجرا با مشکل روبرو خواهیم بود.
30
30
31
31
همانطور که میبینید هنگام اجرا به ارور برخورد کردیم. چون مقدار `"this"` برابر با `undefined` است.
32
32
@@ -51,7 +51,7 @@ user.hi();
51
51
52
52
خب پس چگونه اطلاعات مربوط به `this` از قسمت اول به دوم منتقل میشود؟
53
53
54
-
اگر ما این سوال هارا در خط های جداگانه ای قرار بدهیم, مطمئنا مقدار `this` از دست خواهد رفت:
54
+
اگر ما این دستور را در خط های جداگانه ای قرار بدهیم, مطمئنا مقدار `this` از دست خواهد رفت:
55
55
56
56
```js run
57
57
let user = {
@@ -68,9 +68,9 @@ hi(); // است undefiend برابر با this خطا! چون مقدار
68
68
69
69
در اینجا `hi = user.hi` تابع را در متغیر میریزد و چون خط آخر مستقل و از نظر جاوااسکریپت دستور جداگانه ای است به همین دلیل `this` وجود ندارد.
70
70
71
-
** برای اینکه دستور `()user.hi` درست کار کند, جاوااسکریپت برای آن یک راه حلی دارد. عملگر نقطه `'.'` نه فقط فانکشن بلکه مقدار خاصی از ریفرنس تایپ ها [Reference Type](https://tc39.github.io/ecma262/#sec-reference-specification-type) را برمیگرداند **
71
+
** برای اینکه دستور `()user.hi` درست کار کند, جاوااسکریپت برای آن یک راه حلی دارد. عملگر نقطه `'.'` نه فقط فانکشن بلکه مقدار خاصی از ریفرنس تایپ ها [Reference Type](https://tc39.github.io/ecma262/#sec-reference-specification-type) را برمیگرداند **.
72
72
73
-
ریفرنس تایپ ها یا نوع ارجاعی "نوع خاصی از داده ها یا specification type" هستند. ما نمیتوانیم به صورت مستقیم از آن استفاده کنیم ولی به صورت داخلی داخل زبان تعبیه شده و استفاده میشود
73
+
ریفرنس تایپ ها یا نوع ارجاعی "نوع خاصی از داده ها یا specification type" هستند. ما نمیتوانیم به صورت مستقیم از آن استفاده کنیم ولی به صورت داخلی داخل زبان تعبیه شده و استفاده میشود.
74
74
75
75
این نوع داده خاص شامل سه مقدار `(base, name, strict)` هست که:
76
76
-`base` یک آبجکت است
@@ -85,7 +85,7 @@ hi(); // است undefiend برابر با this خطا! چون مقدار
85
85
```
86
86
وقتی که پرانتزی در Reference type ها صدا زده میشود, همه اطلاعات مربوط به اشیاء و متد فعلی را دریافت میکند و به درستی کلمه کلیدی `this` را مقداردهی میکند.
87
87
88
-
نوع Reference type یک نوع داده داخلی "واسط" با هدف انتقال اطلاعات مربوطه از عملگر نقطه `.` به پرانتز است
88
+
نوع Reference type یک نوع داده داخلی "واسط" با هدف انتقال اطلاعات مربوطه از عملگر نقطه `.` به پرانتز است.
89
89
90
90
عملگری مانند عملگر انتساب (Assign) در `hi = user.hi` خاصیت Reference type را در متغیر جدید کنار میذارد و صرفا مقدار تابع `user.hi` برگردانده شده را میریزد. و سپس `this` مقدار خود را از دست میدهد.
91
91
@@ -97,8 +97,8 @@ hi(); // است undefiend برابر با this خطا! چون مقدار
97
97
98
98
وقتی که یک ویژگی یا Peraperty مخصوصا توسط عملگر نقطه `.` در `()obj.method` خوانده میشود, نه تنها مقدار ویژگی بلکه مقادیر خاص مانند ویژگی ها یا توابع خاص را هم برمیگرداند.
99
99
100
-
بعد از اینکه متدی فراخوانی شد, عملگر پرانتز آبجکت را دریافت و `this` را مقداردهی میکند
100
+
بعد از اینکه متدی فراخوانی شد, عملگر پرانتز آبجکت را دریافت و `this` را مقداردهی میکند.
101
101
102
-
برای مابقی عملگر ها Reference Type تبدیل به مقدار ویژگی میشود (تابع هم همینطور)
102
+
برای مابقی عملگر ها Reference Type تبدیل به مقدار ویژگی میشود (تابع هم همینطور).
103
103
104
104
همه مکانیزم هایی که از چشم ما پنهان هستند, خیلی کم پیش میاید که از آن را مهم بدانیم و مطلع شویم که چطور کار میکنند. مانند زمانی که یک مقد به صورت پویا از طریق آبجکت و با استفاده از عبارت ها به دست میاید.
0 commit comments