По какой логике bind принимает только первый контекст?

Метод bind в JavaScript создает новую функцию, у которой устанавливается указанный контекст (также известный как this) и, опционально, некоторые начальные аргументы. При вызове этой новой функции она будет выполняться в указанном контексте, даже если она вызывается в другом контексте.

При вызове bind на функции предоставляется только один контекст (объект, который будет использоваться в качестве this внутри функции). Это происходит по причине того, что в языке JavaScript при обращении к функции, this определяется во время вызова. Таким образом, когда мы вызываем bind устанавливаем контекст только для данной функции, а не для других функций.

Если вам нужно связать несколько контекстов с функцией, вы можете воспользоваться следующими подходами:

1. Создать новую функцию, которая делегирует выполнение другой функции с другим контекстом:

function delegateFunction(originalFunction, context) {
    return function() {
        return originalFunction.apply(context, arguments);
    };
}

const newFunction = delegateFunction(originalFunction, context);

2. Использовать call или apply, которые позволяют вызвать функцию с указанным контекстом непосредственно при вызове:

originalFunction.call(context, arg1, arg2, ...);
originalFunction.apply(context, [arg1, arg2, ...]);

Таким образом, bind в JavaScript принимает только один контекст, потому что он создает новую функцию с жестко заданным контекстом для вызова этой функции, сохраняя оригинальную функцию неизменной и не внося изменений в ее контекст выполнения.