اÛÙ Ù ÙØ§Ù٠در Ø¯Ø³ØªÙ Ø¨ÙØ¯Û Ù Ø¨Ø§ØØ« Ù¾ÛØ´Ø±Ùت٠است, Ø¨Ø±Ø§Û ÙÙÙ Ø¢Ù Ø¨Ø§ÛØ¯ Ø¨Ù Ù Ø¨Ø§ØØ« پاÛÙ Ù Ø³ÙØ· Ø¨Ø§Ø´ÛØ¯.
٠٠ک٠است اÛÙ Ù Ø¨Ø§ØØ« Ø²ÛØ§Ø¯ Ù ÙÙ ÙØ¨Ø§Ø´Ùد ÚÙÙ Ø®ÛÙÛ Ø§Ø² Ø¨Ø±ÙØ§Ù Ù ÙÙÛØ³Ø§Ù Ø¨Ø§ØªØ¬Ø±Ø¨Ù Ø§Û ÙØ³ØªÙد Ú©Ù Ú©Ø§Ø±Ø´Ø§Ù Ø¨Ù Ø®ÙØ¨Û Ù¾ÛØ´ Ù ÛØ±Ùد ٠اÛÙ Ù Ø¨Ø§ØØ« را ÙÙ ÛØ¯Ø§ÙÙØ¯. اگر Ø¹ÙØ§ÙÙ Ù ÙØ¯ Ø¨Ù Ø¯Ø§ÙØ³ØªÙ اÛÙÚ©Ù Ø¯Ø³ØªÙØ±Ø§Øª ÚÚ¯ÙÙ٠کار Ù ÛÚ©ÙÙØ¯ ÙØ³ØªÛد Ø¨Ø®ÙØ§ÙÛØ¯.
با ÙØ±Ø§Ø®ÙاÙÛ ÛÚ© Ù
تد Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§ ٠داÛÙØ§Ù
ÛÚ© Ù
Ù
ک٠است Ù
ÙØ¯Ø§Ø± this از دست Ø¨Ø±ÙØ¯.
ب٠عÙÙØ§Ù ٠ثاÙ:
let user = {
name: "John",
hi() { alert(this.name); },
bye() { alert("Bye"); }
};
user.hi(); // works
// اجرا Ø´ÙØ¯ user.by Ù Ø¯Ø±ØºÛØ±Ø§ÛÙØµÙرت user.hi Ø¨ÙØ¯ Ù
تد john ØØ§Ù Ø¨Ø±Ø±Ø³Û Ù
ÛÚ©ÙÛÙ
اگر ÙØ§Ù
برابر
(user.name == "John" ? user.hi : user.bye)(); // Error!
در خط آخر Ù
ا شرط س٠تاÛÛ (تک خطÛ) را دارÛÙ
ک٠براساس true ÛØ§ false Ø¨ÙØ¯Ù Ù
ÙØ¯Ø§Ø± user.name Ù
شخص Ù
ÛØ´Ùد Ú©Ù Ø¢ÛØ§ Ù
تد user.hi اجرا Ù
ÛØ´Ùد ÛØ§ user.bye. ÙØªÛج٠true است Ù user.hi Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù Ù
ÛØ´Ùد.
ÙÙÛ ÚÙ٠٠تد Ù¾Ø±Ø§ÙØªØ² ÙØ¯Ø§Ø±Ø¯ درÙÙگا٠اجرا با Ù Ø´Ú©Ù Ø±ÙØ¨Ø±Ù Ø®ÙØ§ÙÛÙ Ø¨ÙØ¯.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛØ¨ÛÙÛØ¯ ÙÙگاÙ
اجرا Ø¨Ù Ø§Ø±ÙØ± Ø¨Ø±Ø®ÙØ±Ø¯ کردÛÙ
. ÚÙÙ Ù
ÙØ¯Ø§Ø± "this" برابر با undefined است.
کد Ø²ÛØ± کار Ù ÛÚ©ÙØ¯ (آبجکت با ع٠Ùگر ÙÙØ·Ù):
user.hi();
ا٠ا اÛ٠کد Ø§ØµÙØ§ کار ÙÙ ÛÚ©ÙØ¯! (ÙØ§Ùکش٠بدÙÙ Ù¾Ø±Ø§ÙØªØ²)
(user.name == "John" ? user.hi : user.bye)(); // Error!
ÚØ±Ø§Ø اگر Ù
ØªÙØ¬Ù Ø´Ø¯ÛØ¯ ک٠تا اÛÙØ¬Ø§ ÚÙ Ø§ØªÙØ§ÙÛ Ø§ÙØªØ§Ø¯Ù, Ø¨ÛØ§ÛÛØ¯ ب٠عÙ
Ùکرد ()obj.method بپردازÛÙ
.
ØªÙØ¶ÛØØ§Øª دربار٠Reference type
Ùگا٠کÙÛØ¯. عبارت ()obj.method د٠عÙ
Ùگر Ø¯Ø§Ø®Ù Ø®ÙØ¯ دارد:
- ابتدا, عÙ
Ùگر ÙÙØ·Ù
'.'ÙÛÚÚ¯Ûobj.methodرا Ù¾ÛØ¯Ø§ Ù ÛÚ©ÙØ¯. - سپس Ù¾Ø±Ø§ÙØªØ²
()آ٠را اجرا Ù ÛÚ©ÙØ¯.
خب پس ÚÚ¯ÙÙÙ Ø§Ø·ÙØ§Ø¹Ø§Øª Ù
Ø±Ø¨ÙØ· ب٠this از ÙØ³Ù
ت اÙ٠ب٠دÙÙ
Ù
ÙØªÙÙ Ù
ÛØ´ÙدØ
اگر Ù
ا اÛÙ Ø¯Ø³ØªÙØ± را در خط ÙØ§Û جداگاÙÙ Ø§Û ÙØ±Ø§Ø± بدÙÛÙ
, Ù
Ø·Ù
Ø¦ÙØ§ Ù
ÙØ¯Ø§Ø± this از دست Ø®ÙØ§Ùد Ø±ÙØª:
let user = {
name: "John",
hi() { alert(this.name); }
};
// اگر ب٠اÛÙ ØµÙØ±Øª در د٠خط جدا Ù
تد را صدا بزÙÛÙ
:
let hi = user.hi;
hi(); // است undefiend برابر با this خطا! ÚÙÙ Ù
ÙØ¯Ø§Ø±
در اÛÙØ¬Ø§ hi = user.hi تابع را در Ù
ØªØºÛØ± Ù
ÛØ±Ûزد Ù ÚÙ٠خط آخر Ù
ستÙ٠٠از ÙØ¸Ø± Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø¯Ø³ØªÙØ± جداگاÙÙ Ø§Û Ø§Ø³Øª ب٠ÙÙ
Û٠دÙÛÙ this ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯.
** Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù Ø¯Ø³ØªÙØ± ()user.hi درست کار Ú©ÙØ¯, Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø¨Ø±Ø§Û Ø¢Ù ÛÚ© را٠ØÙÛ Ø¯Ø§Ø±Ø¯. عÙ
Ùگر ÙÙØ·Ù '.' ÙÙ ÙÙØ· ÙØ§Ùکش٠بÙÚ©Ù Ù
ÙØ¯Ø§Ø± Ø®Ø§ØµÛ Ø§Ø² رÛÙØ±Ùس تاÛÙ¾ ÙØ§ Reference Type را برÙ
ÛÚ¯Ø±Ø¯Ø§ÙØ¯ **.
رÛÙØ±Ùس تاÛÙ¾ ÙØ§ ÛØ§ ÙÙØ¹ Ø§Ø±Ø¬Ø§Ø¹Û âÙÙØ¹ Ø®Ø§ØµÛ Ø§Ø² Ø¯Ø§Ø¯Ù ÙØ§ ÛØ§ specification typeâ ÙØ³ØªÙد. ٠ا ÙÙ ÛØªÙاÙÛÙ Ø¨Ù ØµÙØ±Øª ٠ستÙÛ٠از Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ ÙÙÛ Ø¨Ù ØµÙØ±Øª داخÙÛ Ø¯Ø§Ø®Ù Ø²Ø¨Ø§Ù ØªØ¹Ø¨ÛÙ Ø´Ø¯Ù Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛØ´Ùد.
اÛÙ ÙÙØ¹ داد٠خاص شاÙ
٠س٠Ù
ÙØ¯Ø§Ø± (base, name, strict) ÙØ³Øª Ú©Ù:
baseÛÚ© آبجکت استnameÙØ§Ù ÙÛÚÚ¯Û Ø¢Ø¨Ø¬Ú©Øª ÙØ³Øª- اگر
use strictتعبÛ٠شد٠باشد Ù ÙØ¯Ø§Ø±strictÙÛØ² true است.
Ù٠تÙÙØ§ Ù
ÙØ¯Ø§Ø± user.hi ÙØ§ÙÚ©Ø´Ù ÙÛØ³Øª بÙÚ©Ù ÙÙØ¹ آ٠از ÙÙØ¹ Reference type ÙØ³Øª. user.hi در ØØ§Ùت strict mode ب٠اÛÙ ØµÙØ±Øª است:
// Ù
ÙØ¯Ø§Ø± Reference Type
(user, "hi", true)
ÙÙØªÛ Ú©Ù Ù¾Ø±Ø§ÙØªØ²Û در Reference type ÙØ§ صدا زد٠Ù
ÛØ´Ùد, ÙÙ
Ù Ø§Ø·ÙØ§Ø¹Ø§Øª Ù
Ø±Ø¨ÙØ· Ø¨Ù Ø§Ø´ÛØ§Ø¡ Ù Ù
تد ÙØ¹ÙÛ Ø±Ø§ Ø¯Ø±ÛØ§Ùت Ù
ÛÚ©ÙØ¯ Ù Ø¨Ù Ø¯Ø±Ø³ØªÛ Ú©ÙÙ
Ù Ú©ÙÛØ¯Û this را Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ù
ÛÚ©ÙØ¯.
ÙÙØ¹ Reference type ÛÚ© ÙÙØ¹ داد٠داخÙÛ âÙØ§Ø³Ø·â با ÙØ¯Ù Ø§ÙØªÙØ§Ù Ø§Ø·ÙØ§Ø¹Ø§Øª Ù
Ø±Ø¨ÙØ·Ù از عÙ
Ùگر ÙÙØ·Ù . Ø¨Ù Ù¾Ø±Ø§ÙØªØ² است.
عÙ
ÙÚ¯Ø±Û Ù
اÙÙØ¯ عÙ
Ùگر Ø§ÙØªØ³Ø§Ø¨ (Assign) در hi = user.hi Ø®Ø§ØµÛØª Reference type را در Ù
ØªØºÛØ± Ø¬Ø¯ÛØ¯ Ú©ÙØ§Ø± Ù
ÛØ°Ø§Ø±Ø¯ Ù ØµØ±ÙØ§ Ù
ÙØ¯Ø§Ø± تابع user.hi Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù شد٠را Ù
ÛØ±Ûزد. ٠سپس this Ù
ÙØ¯Ø§Ø± Ø®ÙØ¯ را از دست Ù
ÛØ¯Ùد.
Ø¯Ø±ÙØªÛجÙ, تÙÙØ§ Ø¯Ø±ØµÙØ±ØªÛ Ù
ÙØ¯Ø§Ø± this Ø¨Ù Ø¯Ø±Ø³ØªÛ Ù¾Ø§Ø³ Ù
ÛØ´Ùد Ú©Ù Ù
ستÙÛÙ
ا ÙØ§Ùکش٠را با Ø§Ø³ØªÙØ§Ø¯Ù از ÙÙØ·Ù obj.method() ÛØ§ براکت باز ٠بست٠obj['method']() صدا بزÙÛÙ
. Ø±Ø§Ù ÙØ§Û Ù
ختÙÙÛ Ø¨Ø±Ø§Û Ø±ÙØ¹ اÛÙ Ù
Ø´Ú©Ù ÙØ³Øª Ù
ث٠func.bind().
Ø®ÙØ§ØµÙ
تاÛÙ¾ Ù Ø±Ø¬Ø¹Û ÛØ§ Reference Type ÙØ§ ÙÙØ¹ داد٠داخÙÛ Ø¯Ø± Ø²Ø¨Ø§Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÙØ³ØªÙد.
ÙÙØªÛ Ú©Ù ÛÚ© ÙÛÚÚ¯Û ÛØ§ Peraperty Ù
Ø®ØµÙØµØ§ ØªÙØ³Ø· عÙ
Ùگر ÙÙØ·Ù . در ()obj.method Ø®ÙØ§Ùد٠Ù
ÛØ´Ùد, Ù٠تÙÙØ§ Ù
ÙØ¯Ø§Ø± ÙÛÚÚ¯Û Ø¨ÙÚ©Ù Ù
ÙØ§Ø¯Ûر خاص Ù
اÙÙØ¯ ÙÛÚÚ¯Û ÙØ§ ÛØ§ ØªÙØ§Ø¨Ø¹ خاص را ÙÙ
برÙ
ÛÚ¯Ø±Ø¯Ø§ÙØ¯.
بعد از اÛÙÚ©Ù Ù
ØªØ¯Û ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø¯, عÙ
Ùگر Ù¾Ø±Ø§ÙØªØ² آبجکت را Ø¯Ø±ÛØ§Ùت Ù this را Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ù
ÛÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø§Ø¨ÙÛ Ø¹Ù Ùگر ÙØ§ Reference Type تبدÛÙ Ø¨Ù Ù ÙØ¯Ø§Ø± ÙÛÚÚ¯Û Ù ÛØ´Ùد (تابع ÙÙ ÙÙ ÛÙØ·Ùر).
Ù٠٠٠کاÙÛØ²Ù ÙØ§ÛÛ Ú©Ù Ø§Ø² ÚØ´Ù ٠ا Ù¾ÙÙØ§Ù ÙØ³ØªÙد, Ø®ÛÙÛ Ú©Ù Ù¾ÛØ´ Ù ÛØ§Ûد ک٠از آ٠را Ù Ù٠بداÙÛÙ Ù Ù Ø·ÙØ¹ Ø´ÙÛÙ Ú©Ù ÚØ·Ùر کار Ù ÛÚ©ÙÙØ¯. ٠اÙÙØ¯ ز٠اÙÛ Ú©Ù ÛÚ© Ù ÙØ¯ Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§ از طرÛ٠آبجکت ٠با Ø§Ø³ØªÙØ§Ø¯Ù از عبارت ÙØ§ ب٠دست Ù ÛØ§Ûد.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)