Мастер-классы по Javascript, AJAX/COMET, jQuery Узнать больше...
Javascript.RU

call

Синтаксис

var result = fun.call(thisArg[, arg1[, arg2[, ...]]])

Аргументы

thisArg
Задает значение this внутри функции. Если thisArg - null или undefined, то это будет глобальный объект. В ином случае, this будет равно Object(thisArg) (то есть thisArg, если thisArg уже объект, или String, Boolean или Number, если thisArg - примитивное значение соответствующего типа). Таким образом, при выполнении функции всегда соблюдается условие typeof this == 'object'.
arg1, arg2 ..
Аргументов, с которыми будет вызвана функция.

Описание, примеры

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

См. также


Автор: Гость (не зарегистрирован), дата: 13 июня, 2010 - 20:01
#permalink

А в чем отличия между apply и call (кроме способа передачи доп. аргументов)? Как-то не верится, что придумали два одинаковых метода для реализации одного и того же.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
5 + 3 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Вакансии
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Статьи и мероприятия

Будьте в курсе наших последних новостей!

Последние обсуждения на форуме
Forum
Последние комментарии