Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Задание параметра "this" для callback-функций
При динамическом назначении обработчиков событий (в DHTML или в асинхронных вызовах типа AJAX), очень часто требуется каким-то образом передать в callback-функцию дополнительные параметры. Как минимум, часто бывает желательно, чтобы внутри функции параметр this имел определённое значение. Каждый, кто пытался использовать this в таких функциях, знает, что он может указывать куда угодно, но только не на тот объект, что нужен. Эта проблема может быть решена следующим образом:
Исходный код этого примера:
<p><a id="aaa" href="/java/">Ссылка1 для проверки</a></p>
<p><a id="aaa2" href="/php/">Ссылка2 для проверки</a></p>
<script>
Function.prototype.bind = function(object) {
var method = this;
return function() {
return method.apply(object, arguments)
}
}
l=document.getElementById("aaa");
l2=document.getElementById("aaa2");
addEvent(l, "click", function() { alert(this.href); return false;}.bind(l2));
addEvent(l2, "click", function() { alert(this.href); return false;}.bind(l2));
</script>
В этом примере this внутри функции-обработчика будет указывать на link. Точно так же можно передать в callback указатель на любой другой нужный объект.
Функция addEvent описана здесь: addEvent.
Пояснение к функции apply
Синтаксис
var result = function.apply(thisArg[, argsArray]);
Аргументы
thisArg - Задает значение this внутри функции.
argsArray - Массив аргументов, с которыми будет вызвана функция, или null/undefined для вызова без аргументов.
Пояснение к функции arguments
arguments - переменная, доступная внутри функции и содержащая аргументы и ссылку на саму функцию.
.
Прокомментировать/Отблагодарить