Изменение контекста функции

jQuery.proxy()

По заданной функции, создает другую такую же, внутри которой переменная this будет равна заданному значению.

jQuery.proxy(function, context):function1.4

function — функция, у которой будет установлено значение this.
context — объект, который будет помещен в this.

jQuery.proxy(context, name, [arg1], [arg2], ...):function1.4

context — объект, который будет помещен в this.
name — имя метода объекта context. У этого метода и будет изменен this (на context).
arg1, arg2, ... — значения, которые будут переданы методу name в качестве аргументов.

jQuery.proxy() незаменим, если вы хотите, чтобы переменная this внутри функции была прочно связана с определенным значением (обычно она зависит от контекста вызова). Это может быть очень удобно, при установке обработчиков событий (см. пример). Надо отметить, что если вы устанавливаете в качестве обработчика событий функцию, полученную с помощью jQuery.proxy(), то удалить ее можно указав как саму эту функцию, так и ее оригинал.

Пример

Допустим, нам нужно установить обработчик нажатия кнопкой мыши, который должен сработать только один раз. Установим в качестве такого обработчика функцию, которая по совместительству является методом объекта. Тогда, указав этот объект в качестве переменной this, мы сможем удалить функцию из обработчиков, внутри ее самой:

// создадим объект
var obj = {
  name: "John",
  test: function() {
    alert( this.name );
    $("#test").unbind("click", obj.test);
  }
};
 
// в методе test, находящемся внутри объекта obj, присвоим obj значению this
$("#test").click(jQuery.proxy(obj, "test"));
 
// то же самое можно сделать с помощью другого варианта функции proxy():
$("#test").click( jQuery.proxy( obj.test, obj ) );

Ссылки

Поисковые ключи:
  • изменить контекст вызова функции
  • установить контекст вызова функции
  • контекст вызова функции
  • $.proxy()
  • proxy()
  • .proxy()