Как отменить дополнительный аргумент, а не выдвинуть его, когда я вызываю уже связанную функцию в JavaScript - PullRequest
0 голосов
/ 06 июля 2018
var bound = async.bind({},'hello','world');
bound.call({},resolve,reject);

function async(){
  console.log(arguments) //0:'hello', 1:'world', 2:resolve, 3:reject
  //what I expect: 0:resolve, 1:reject, 2:'hello', 3:'world'
}
function resolve(){}
function reject(){}

Когда у меня есть функция, которая уже связана с некоторыми аргументами, а затем я использую .call с дополнительными аргументами, эти дополнительные аргументы выдвигаются (добавляется в конец) в arguments объект этой функции.

Есть ли возможность unshift (добавить в начало) эти дополнительные аргументы для объекта arguments в этом случае, когда функция уже связана с некоторыми аргументами?

1 Ответ

0 голосов
/ 06 июля 2018

Можно использовать другой подход для связывания с функцией обмена аргументами.

function resolve() {}
function reject() {}

function async() {
    console.log(arguments);
}

function swap(a, b, c, d) {
    return this(c, d, a, b);
}

var bound = swap.bind(async, 'hello', 'world');

bound.call({}, resolve, reject);
...