Для меня это звучит как работа для функции-оболочки.
Напишите функцию, которая вызывает другую функцию, и поместите свой код в конец этого (или где-либо еще). Тогда всегда называйте свою версию.
Сортировка шаблона адаптера. http://en.wikipedia.org/wiki/Adapter_pattern
Я полагаю, что вы можете скрыть область действия исходной функции и назвать ее так же, если не можете изменить вызывающий код (не работает с некоторыми встроенными функциями, такими как alert, но должен работать для кода библиотеки). Если это не вариант, посмотрите, позволит ли прототип расширить объект для добавления функциональности. http://phrogz.net/js/classes/ExtendingJavaScriptObjectsAndClasses.html
//Only add this implementation if one does not already exist.
if (Array.prototype.slice==null) Array.prototype.slice=function(start,end){
if (start<0) start=this.length+start; //'this' refers to the object to which the prototype is applied
if (end==null) end=this.length;
else if (end<0) end=this.length+end;
var newArray=[];
for (var ct=0,i=start;i<end;i++) newArray[ct++]=this[i];
return newArray;
}
В качестве аргументов вы также можете сделать так, чтобы ваша версия принимала необязательные аргументы (аналогичные jQuery / MooTools), а затем посмотрите, что было передано.
Примеры необязательных аргументов здесь.
http://www.openjs.com/articles/optional_function_arguments.php
function accident() {
for( var i = 0; i < arguments.length; i++ ) {
alert("This accident was caused by " + arguments[i]);
}
}