Вы никогда не перестанете удивляться JavaScript. В этом кратком совете я собираюсь показать вам, как использовать методы JavaScript, call
и apply
для вызова функций других объектов. Не знаю, о чем я? Давайте начнем!
Посмотреть скринкаст
Использование 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 ».
Спасибо за прочтение!