Методы call и apply
Метод call() это предопределенный метод JavaScript. Он может использоваться для вызова любого метода с любым владельцем объекта в качестве аргумента (параметра).
Благодаря методу call() любой объект может использовать методы, принадлежащие другому объекту.
В вызываем метод fullName, принадлежащий объекту person, для использования с объектом person1.
Пример:
var person = { fullName: function() { return this.firstName + " " + this.lastName; } } var person1 = { firstName:"Jonny", lastName: "Cash", } var person2 = { firstName:"Marry", lastName: "Muller", } person.fullName.call(person1); // вернет "Jonny Cash"
В следующем примере вызывается метод fullName, принадлежащий объекту person, для использования с объектом person2:
var person = { fullName: function() { return this.firstName + " " + this.lastName; } } var person1 = { firstName:"Jonny", lastName: "Cash", } var person2 = { firstName:"Marry", lastName: "Muller", } person.fullName.call(person2); // вернет "Marry Muller"
С методом apply() можно вызывать любые методы для использования с разными объектами.
В строгом режиме (use strict) JavaScript, если первый аргумент метода apply() не является объектом, то он становится владельцем (объектом) вызванной функции. В обычном режиме он становится глобальным объектом.
В примере метод fulllName объекта person применяется к объекту person1:
var person = { fullName: function() { return this.firstName + " " + this.lastName; } } var person1 = { firstName: "Marry", lastName: "Muller", } person.fullName.apply(person1); // вернет "Marry Muller"
Для того чтобы найти максимальное число в списке значений, достаточно воспользоваться методом Math.max():
Math.max(1,2,3); // вернет 3
Однако массивы JavaScript не имеют метода max(). Тем не менее, вместо этого можно применить к массиву метод Math.max().
Math.max.apply(null, [1,2,3]); // таквже ернет 3
Первый аргумент (null) не имеет особого значения. В данном примере он просто не используется.
Следующий код даст тот же результат:
Math.max.apply(Math, [1,2,3]); // также вернет 3
Math.max.apply(" ", [1,2,3]); // также вернет 3
Math.max.apply(0, [1,2,3]); // также вернет 3
Основная разница между этими двумя методами: