В чем суть метода .call?

Рейтинг: 2Ответов: 1Опубликовано: 12.09.2014
Предположим, что уже существуют и объект, и функция.
function f(){}
var o = {};
Выполнение кода:
f.call(o, 1, 2);
Равносильно следующему коду:
o.m = f;
o.m(1, 2);
delete o.m;

По пути изучения js наткнулся на данный метод, но сути так понять и не могу. Может, кто даст хороший гайд или обьяснит, в чем прикол?

Ответы

▲ 3Принят

Прикол здесь в ручной установке контекста функции. Под контекстом понимается объект this внутри функции.

function f(x) {
    alert(this);
}

var o1 = '123';
var o2 = '456';

f.call(o1, 0);    // выведет 123
f.call(o2, 0);    // выведет 456

Если контекст не устанавливать, то им станет объект window. Примером применения смены контекста явлвятся jQuery. В этой библиотеке в каждом колбэке контекст устанавливается в объект, с которым работает колбэк:

$('#btn').click(function() {
    console.log(this); // здесь this - это элемент #btn
}