Вызов функции и временное присвоение this объекта:
Если в качестве объекта передать null, то для функции в качестве this будет window
var n = 'n in window'; function foo () { return this.n; } const obj = { n: 'n in obj' } foo.call(obj) // n in obj foo.apply(obj) // n in obj foo.call(null) // n in window foo.apply(null) // n in window
Кроме изменения this эти два метода могут передавать аргументы. Apply принимает аргументы как массив, а Call - как список.
/* Проблема передачи массива в качестве аргумента для Math.max */ const arr = [10, 20, 30, 90, 80, 70, 60 , 40, 50]; Math.max(10, 20, 30, 90, 80, 70, 60 , 40, 50) // 90 Math.max(arr) // NaN /* Решение с помощью apply */ const max = function (array) { return Math.max.apply(Math, array) }; max(arr) // 90
function addProp (prop, value) {
this[prop] = value;
}
const ann = {
name: "Ann"
}
addProp.call(ann, "group", "FE1")
ann.group // FE1