Sobes.tech
Middle+

Эгер эки контекстти кезек-кезек байланыстырсаңыз, эмне болот?

sobes.tech AI

AIден жооп

Эгер сиз кезектештирип эки контекстти call, apply же bind ыкмалары менен байланыштырып жатсаңыз, экинчи контекст эске алынбайт. Бул ыкмалардын баарында биринчи өткөрүлгөн контекстке артыкчылык берилет. bind колдонулганда, биринчи контекст менен жаңы функция түзүлөт.

Келгиле, bind мисалын карап көрөлү:

// Биринчи контекстти имитация кылган объект
const context1 = {
  name: 'Контекст 1'
};

// Экинчи контекстти имитация кылган объект
const context2 = {
  name: 'Контекст 2'
};

// Контекстти колдонгон функция
function greet() {
  // Учурдагы контексттин (this) 'name' мүчөсүнүн маанисин көрсөтөт
  console.log(`Салам из: ${this.name}`);
}

// greet функциясын context1 менен байланыштырабыз
const boundGreetToContext1 = greet.bind(context1);

// boundGreetToContext1 кайрадан context2 менен байланыштыруу аракетин жасайбыз
const boundGreetToContext2 = boundGreetToContext1.bind(context2);

// boundGreetToContext2'ни чакырабыз
boundGreetToContext2(); // Натыйжа: Салам из: Контекст 1

// Экинчи байланышты колдонууда call же apply аракетинде

boundGreetToContext2.call(context2); // Натыйжа: Салам из: Контекст 1
boundGreetToContext2.apply(context2); // Натыйжа: Салам из: Контекст 1

Бул мисалда, boundGreetToContext1 алгач context1 менен байланыштырылган. bind аркылуу кайра context2 менен байланыштыруу аракеттери эске алынбайт. boundGreetToContext2 чакырылышы (жана анын call же apply менен колдонулушу) ар дайым биринчи байланыштыруу учурунда белгиленген контекстти (context1) колдонуп турат.