Middle
Чӣ тавр манъ кардани тағйири контекст дар JavaScript?
sobes.tech AI
Ҷавоб аз AI
Дар JavaScript, контексти иҷрои функсия (маҳз this) дар вақти даъват муайян мешавад. Манъ кардани пурра тағйир додани он дар маънои абсолутӣ имконнопазир аст, аммо онро бо роҳҳои гуногун назорат кардан ё мустаҳкам кардан мумкин аст:
-
Роҳҳои
call,apply,bind:callваapplyимкон медиҳанд, ки функсия бо контексти равшан ва аргументҳо даъват шавад (дарcallҷудо, дарapplyҳамчун массив).bindяк функсияи навро месозад, ки дар онthisсахт ба арзиши муайян мустаҳкам шудааст дар вақти сохтани он, новобаста аз даъвати баъдӣ. Ин самараноктарин роҳи "манъ" кардани тағйири контекст барои даъватҳои оянда мебошад.
// Масал бо bind const obj = { арзиш: 42 }; function нишонДоданиАрзиш() { console.log(this.арзиш); } const мустаҳкамШудароНишонДодан = нишонДоданиАрзиш.bind(obj); мустаҳкамШудароНишонДодан(); // Натиҷа 42 мустаҳкамШудароНишонДодан.call({ арзиш: 100 }); // Ҳамеша 42, контекст мустаҳкам шудааст -
Функсияҳои стрелка (Arrow Functions):
- Функсияҳои стрелка соҳиби
thisнестанд. Онҳоthis-ро аз муҳити атроф (минтақаи лексикӣ) дар вақти муайян кардани мегиранд. - Контексти функсияи стрелка наметавонад тағйир дода шавад бо истифода аз
call,apply, ёbind.
// Масал бо функсияи стрелка const объектИдории = { номи: 'Идории' }; синфи МояСинф { constructor() { this.номиКласс = 'МояСинф'; this.показатиНомиArrow = () => { // `this` дар ин ҷо аз конструктора ё муҳити муайяншуда гирифта шудааст console.log(this.номиКласс); }; } показатиНомиОдатӣ() { // `this` дар вақти даъват муайян мешавад console.log(this.номиКласс); } } const намуна = new МояСинф(); намуна.показатиНомиArrow(); // Натиҷа 'МояСинф' const дигарОбъект = { номи: 'Дигар' }; const мустаҳкамШудароArrow = намуна.показатиНомиArrow.bind(дигарОбъект); // кӯшиши тағйир додани контекст мустаҳкамШудароArrow(); // Ҳамеша 'МояСинф', контексти стрелка тағйирнопазир аст намуна.показатиНомиОдатӣ.call(дигарОбъект); // Натиҷа 'Дигар', контексти функсияи оддӣ тағйир меёбад - Функсияҳои стрелка соҳиби
Бинобар ин, "манъ кардани тағйири контекст" беҳтарин маънои онро дорад, ки чорчӯбаи сахт мустаҳкам. Барои ин bind барои функсияҳои оддӣ ва табиӣ лексикӣ пайвандшавии стрелка истифода мешавад. Функсияҳои стрелка дар ин маъно "напокобили" бештар мебошанд.