Задание параметра "this" для callback-функций

При динамическом назначении обработчиков событий (в DHTML или в асинхронных вызовах типа AJAX), очень часто требуется каким-то образом передать в callback-функцию дополнительные параметры. Как минимум, часто бывает желательно, чтобы внутри функции параметр this имел определённое значение. Каждый, кто пытался использовать this в таких функциях, знает, что он может указывать куда угодно, но только не на тот объект, что нужен. Эта проблема может быть решена следующим образом:

Ссылка1 для проверки

Ссылка2 для проверки

Исходный код этого примера:
<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 - переменная, доступная внутри функции и содержащая аргументы и ссылку на саму функцию.


.