С методом apply() вы можете вызывать любые методы для использования с разными объектами.
Метод apply() во многом похож на метод call() (см. предыдущую главу).
В следующем примере метод fulllName объекта person применяется к объекту person1:
var person = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
var person1 = {
firstName: "Mary",
lastName: "Doe",
}
person.fullName.apply(person1); // вернет "Mary Doe"
Разница между call() и apply()
Основная разница между этими двумя методами:
- Метод call() принимает аргументы раздельно.
- Метод apply() принимает аргументы в виде массива.
Метод apply() особенно удобен, если необходимо использовать массив вместо списка аргументов.
Метод apply() с аргументами
Метод apply() принимает аргументы в виде массива:
var person = {
fullName: function(city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
}
}
var person1 = {
firstName:"John",
lastName: "Doe",
}
person.fullName.apply(person1, ["Oslo", "Norway"]);
В сравнении с методом call():
var person = {
fullName: function(city, country) {
return this.firstName + " " + this.lastName + "," + city + "," + country;
}
}
var person1 = {
firstName:"John",
lastName: "Doe",
}
person.fullName.call(person1, "Oslo", "Norway");
Эмулирование метода max для массивов
Как вы знаете, для того чтобы найти максимальное число в списке значений, достаточно воспользоваться методом 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
Строгий режим JavaScript
В строгом режиме JavaScript, если первый аргумент метода apply() не является объектом, то он становится владельцем (объектом) вызванной функции. В обычном режиме он становится глобальным объектом.