Лабораторные - Методы call и apply


 Методы 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

Разница между call() и apply()

Основная разница между этими двумя методами: