Методы функций JavaScript call() apply() и bind()

Функция.прототип.вызов()

function printThisAndData(…data) {
  console.log(this.data, …data);
}

const obj = { data: 0 };
const data = [1, 2, 3];

printThisAndData.call(obj, data);       // logs: 0 [1, 2, 3]
printThisAndData.call(obj, …data);    // logs: 0 1 2 3

Функция.прототип.применить()

function printThisAndData(…data) {
  console.log(this.data, …data);
}

const obj = { data: 0 };
const data = [1, 2, 3];

printThisAndData.apply(obj, data);      // logs: 0 1 2 3
printThisAndData.apply(obj, …data);   // Throws a TypeError

Функция.prototype.bind()

function printThisAndData(…data) {
  console.log(this.data, …data);
}

const obj = { data: 0 };
const data = [1, 2, 3];

const printObjAndData = printThisAndData.bind(obj);

printObjAndData(data);                  // logs: 0 [1, 2, 3]
printObjAndData(…data);               // logs: 0 1 2 3

const printObjTwoAndData = printThisAndData.bind(obj, 2);

printObjTwoAndData(data);               // logs: 0 2 [1, 2, 3]
printObjTwoAndData(…data);            // logs: 0 2 1 2 3
Функции JavaScript