jQuery.proxy()
Функция jQuery.proxy()
из переданной функции создаёт такую же, но с новым значением переменной this
. Внутри этой функции переменная this
всегда будет иметь конкретное значение (заданный объект), независимо от контекста вызова. Это особенно полезно во время установки обработчиков событий на элементы страницы. К тому же, для удаления обработчика, полученного с помощью jQuery.proxy()
, можно указать или саму эту функцию, или её оригинал.
Функция jQuery.proxy()
позволяет указать аргументы, которые будут переданы в новую функцию во время запуска. Запустить функцию с определёнными аргументами можно и без изменения this
. Для этого в качестве контекста вызова необходимо указать значение null
или undefined
.
Варианты использования
jQuery.proxy(функция, контекст[, аргумент_1][, аргумент_2]...) => Function
- Возвращает копию любой переданной функции с заданным значением переменной
this
. Объект, в контексте которого будет запускаться функция, передаётся вторым аргументом. Аргументы для передачи в новую функцию указываются отдельными параметрами. jQuery.proxy(контекст, имя_метода[, аргумент_1][, аргумент_2]...) => Function
- Возвращает копию указанного метода переданного первым аргументом объекта с постоянным значением переменной
this
. Возвращённая функция всегда будет запускаться в контексте объекта, методом которого является. Аргументы для передачи в новую функцию указываются отдельными параметрами.
Примеры
<html> <head> <title>Функции библиотеки jQuery</title> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <p>Параграф</p> <button class="button_1">Кнопка 1</button> <button class="button_2">Кнопка 2</button> </body> </html> <script> function selfRead() { alert(this.textContent); } var par = document.body.firstElementChild; $('.button_1').click(selfRead); /* 'Кнопка 1', selfRead запускается в контексте элемента .button_1 */ $('.button_2').click($.proxy(selfRead, par)); /* 'Параграф', selfRead запускается в контексте элемента par */ </script>
Параграф
<html> <head> <title>Функции библиотеки jQuery</title> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <button class="button_1">Кнопка 1</button> <button class="button_2">Кнопка 2</button> </body> </html> <script> var obj = { name: 'Иван', showName: function() { alert(this.name); } }; $('.button_1').click(obj.showName); /* '', showName запускается в контексте элемента .button_1 */ $('.button_2').click($.proxy(obj, 'showName')); /* 'Иван', showName запускается в контексте объекта obj */ </script>