Статьи

Совет: вызов методов JavaScript для других объектов

Вы никогда не перестанете удивляться JavaScript. В этом кратком совете я собираюсь показать вам, как использовать методы JavaScript, call и apply для вызова функций других объектов. Не знаю, о чем я? Давайте начнем!

Вот сценарий: у нас есть два объекта:

01
02
03
04
05
06
07
08
09
10
var joe = {
    name : «Joe»,
    greet : function (name) {
        alert(this.name + » says hello to » + name);
    }
};
 
var jill = {
    name : «Jill»
};

Очень просто заставить Джо поприветствовать Джилл:

1
joe.greet(«Jill»);

Но как мы можем заставить Джилл поприветствовать Джо? У нее нет приветственного метода (и давайте предположим, что мы не можем / не должны / не должны давать ее). Ну, поскольку в JavaScript все, включая функции, является объектом, у всего может быть метод или функция, которая может быть вызвана из него. Функциям предоставляются два метода, которые позволяют вам вызывать их в разных контекстах.

Контекст метода — это, по сути, объект, который будет this при вызове функции. В нашем методе greet this относится к объекту joe , потому что он является его частью.

Теперь попробуйте это:

1
joe.greet.call(jill, «Joe»);

Метод call в функциях JavaScript позволяет изменить контекст функции. Первым параметром, который мы передадим, будет новый контекст: в данном случае это jill . Последующие параметры — это параметры вызываемой функции. В этом случае «Джо» будет передан для greet . Если вы запустите это, вы получите окно с сообщением «Джилл говорит привет Джо».

Есть также метод apply ; единственное отличие состоит в том, что он принимает параметры метода как массив, а не как необработанные параметры, как метод call .

1
joe.greet.call(jill, [«Joe»]);

Если вам трудно вспомнить, принимает ли массив массив call или apply , помните, что a pply и rray оба начинаются с « a ».

Спасибо за прочтение!