Javascript: bind (), call () и apply ()
js-программисты должны знать этот метод
### bind ()
Метод bind () создает новую функцию, при вызове которой для ключевого слова this установлено указанное значение.
const person = { name: 'Tom', salary: 15000, houseRent: function (amount, vat, tax) { return this.salary = this.salary - amount - vat - tax; } }; const firstPerson = { name: 'Piter', salary: 20000 }; const firstPersonHouseRent = person.houseRent.bind(firstPerson); firstPersonHouseRent(2000, 100, 20); console.log(`${firstPerson.name} Balance : ${firstPerson.salary}`); // Piter Balance : 17880
### call ()
Его можно использовать для вызова (вызова) метода с объектом-владельцем в качестве аргумента (параметра).
const person = { name: 'Tom', salary: 15000, chargeBill: function (amount, vat, tax) { return this.salary = this.salary - amount - vat - tax; } }; const firstPerson = { name: 'Piter', salary: 20000 }; person.chargeBill.call(firstPerson, 2000, 100, 20); console.log(`${firstPerson.name} Balance : ${firstPerson.salary}`); // Piter Balance : 17880
### apply ()
Метод apply () используется для вызова функции, содержащей это значение, а аргумент содержит элементы массива.
const person = { name: 'Tom', salary: 15000, chargeBill: function (amount, vat, tax) { return this.salary = this.salary - amount - vat - tax; } }; const firstPerson = { name: 'Piter', salary: 20000 }; person.chargeBill.apply(firstPerson, [2000, 200, 20]); console.log(`${firstPerson.name} Balance : ${firstPerson.salary}`); // Piter Balance : 17780
### Вызов против применения
Разница между call () и apply () заключается в том, что call () передает все аргументы после первого в вызываемую функцию, а apply () принимает массив в качестве второго аргумента и передает элементы этого массива в качестве аргументов.
person.call(thisArg, 1, 2, 3) VS person.apply(thisArg, [1, 2, 3])
NB: параметр, разделенный запятой для call () и Array для apply ().