Middle
Функсияҳои ишоракунанда дар чӣ фарқ мекунанд аз функсияҳои оддӣ дар бораи зарурати истифодаи усули bind?
sobes.tech AI
Ҷавоб аз AI
Функсияҳои стрелка ҳеҷ контексти this-и худро надоранд. Онҳо this-ро аз муҳити атроф ( муҳити лексикалӣ) мегиранд.
Функсияҳои оддӣ this-ро вобаста ба усули даъваташон муайян мекунанд:
- Дар контексти глобалӣ (
windowёglobal). - ҳамчун методи объект (
thisба объект ишора мекунад). - ҳамчун конструктор (
thisба намунаи нав ишора мекунад). - Бо истифода аз
call,applyёbind(thisба таври ошкор муайян карда мешавад).
Аз сабаби он ки функсияҳои стрелка this-и худро надоранд, даъвати bind ба функсияи стрелка маъно надорад ва this-и лексикалӣ, ки бо bind пайваст шудааст, тағйир намеёбад. Агар кӯшиш кунед, ки bind-ро ба функсияи стрелка даъват кунед, он танҳо худи онро бармегардонад.
Масалан:
// Функсияи оддӣ
const normalFunc = function() {
console.log(this.name);
};
const obj1 = { name: 'Объект 1', method: normalFunc };
const obj2 = { name: 'Объект 2' };
obj1.method(); // Натиҷа: Объект 1
const boundFunc = normalFunc.bind(obj2);
boundFunc(); // Натиҷа: Объект 2 (this бо муваффақият тағйир ёфт)
// Функсияи стрелка
const arrowFunc = () => {
console.log(this.name);
};
const obj3 = { name: 'Объект 3' };
// ArrowFunc `this`-ро аз муҳити атроф мегирад (дар ин ҳолат, объект глобалӣ)
arrowFunc(); // Натиҷа: undefined (шояд, зеро `this` дорои `name` нест)
const boundArrowFunc = arrowFunc.bind(obj3);
boundArrowFunc(); // Натиҷа: undefined (`this` тағйир наёфтааст, bind таъсир нарасонд)
// Масалан бо пайваст кардани `this`
const person = {
name: 'Алиса',
greet: function() {
// Ин ҷо, `this` ба `person` ишора мекунад
const greetLater = () => {
// Ин ҷо, `this` аз муҳити берунаи `greet` гирифта мешавад, яъне ҳам `person`
console.log(`Салом, ${this.name}!`);
};
greetLater();
}
};
person.greet(); // Натиҷа: Салом, Алиса!
Хулоса, усули bind барои функсияҳои оддӣ зарур аст, то контексти this-ро равшан муайян кунад, дар ҳоле ки барои функсияҳои стрелка, он зарур нест, зеро this-и онҳо лексикалӣ муайян мешавад ва бо bind тағйир намеёбад.