Метод `bind` в JavaScript применяется для создания новой функции с привязанным контекстом, который будет использоваться при вызове этой функции. Когда мы передаем один контекст в метод `bind`, он создает новую функцию, которая будет вызываться именно в этом контексте.
Логика метода `bind` заключается в том, что он принимает первый параметр как контекст, а все последующие параметры будут передаваться как аргументы при вызове созданной функции. Поэтому даже если мы передаем несколько контекстов последовательно, только первый будет учитываться.
Например, если у нас есть функция `sayHello`:
```javascript
function sayHello() {
console.log(`Hello, ${this.name}`);
}
```
И мы хотим вызвать эту функцию в контексте объекта `person`:
```javascript
const person = {
name: 'Alice'
};
const sayHelloToAlice = sayHello.bind(person);
sayHelloToAlice(); // Выведет "Hello, Alice"
```
В данном примере мы создаем новую функцию `sayHelloToAlice`, которая будет вызываться в контексте объекта `person`.
Чтобы изменить контекст функции на другой, например на объект `anotherPerson`, мы должны создать новую связанную функцию для этого объекта:
```javascript
const anotherPerson = {
name: 'Bob'
};
const sayHelloToBob = sayHello.bind(anotherPerson);
sayHelloToBob(); // Выведет "Hello, Bob"
```
Таким образом, чтобы изменить контекст функции, нужно использовать метод `bind` с одним контекстом, который будет привязан к новой функции. Каждый раз, когда нам нужно изменить контекст функции, мы должны вызывать метод `bind` с новым контекстом.