Метод apply()

С методом 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() не является объектом, то он становится владельцем (объектом) вызванной функции. В обычном режиме он становится глобальным объектом.