Выполняя $('#test1'), вы каждый раз создаете новый экземпляр объекта jQuery. Если упростить код библиотеки, то происходит примерно следующее:
function jQuery(arg) {
var list = document.querySelectorAll(arg), i = list.length;
while (i--) {
this[i] = list[i];
}
}
function $(arg) {
return new jQuery(arg);
}
чтобы изменить метод val для всех объектов jQuery, необходимо внести изменения в прототип:
jQuery.prorotype.val = function () {
return "val2";
};
чтобы изменить метод val конкретного экземпляра jQuery, необходимо сохранить на него ссылку, и работать с ним по этой ссылке:
var $test = $('#test1');
$test.val = function () {
return "val2";
};
alert($test.val());