Метод call может применяться для вызова функции в контексте нужного объекта:
Пример: Вызов sayName в контексте разных объектов
var Animal1 = {name: 'Cat'}
var Animal2 = {name: 'Dog'}
function sayName() {
// this — ссылка на объект, в контексте которого вызвана функция
alert(this.name);
}
sayName.call(Animal1) // выдаст сообщение "Cat"
sayName.call(Animal2) // выдаст сообщение "Dog"
При этом совершенно не важно, какому объекту принадлежит функция. В качестве текущего(this) объекта будет взят первый аргумент.
var Animal1 = {
name: 'Cat',
sayName: function() {
alert(this.name);
}
};
var Animal2 = {name: 'Dog'};
Animal1.sayName() // выдаст сообщение "Cat"
Animal1.sayName.call(Animal2) // выдаст сообщение "Dog"
Помимо смены контекста вызова, метод call может передавать в функцию аргументы:
var obj = {attr: 10};
function sum(a, b) {
alert(this.attr + a + b);
}
sum.call(obj, 5, 2) // выдаст сообщение с результатом "17"
Если контекст вызова не указан, то функция будет выполнятся в контексте объекта window:
window.a = 5
function sayThis() {
alert(this.a);
}
sayThis.call() // выдаст 5
window.a = 5
function sayThis(b) {
alert(this.a + b);
}
sayThis.call(null, 3) // выдаст 8
А в чем отличия между apply и call (кроме способа передачи доп. аргументов)? Как-то не верится, что придумали два одинаковых метода для реализации одного и того же.
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.