Вы могли сделать что-то вроде этого:
var a = (function() {
var original_a = a;
if (condition) {
return function() {
new_code();
original_a();
}
} else {
return function() {
original_a();
other_new_code();
}
}
})();
Объявление original_a
внутренняя часть анонимная функция мешает ему создавать помехи глобальному пространству имен, но это доступно во внутренних функциях.
Как Nerdmaster, упомянутый в комментариях, убедиться включать ()
в конец. Вы хотите вызвать внешнюю функцию и сохранить результат (одна из двух внутренних функций) в a
, не сохранить саму внешнюю функцию в a
.
Шаблон "proxy" мог бы помочь Вам:
(function() {
// log all calls to setArray
var proxied = jQuery.fn.setArray;
jQuery.fn.setArray = function() {
console.log( this, arguments );
return proxied.apply( this, arguments );
};
})();
вышеупомянутые обертки его код в функции для сокрытия "проксированного" - переменная. Это сохраняет setArray-метод jQuery в закрытии и перезаписывает его. Прокси тогда регистрирует все вызовы к методу и делегирует вызов к оригиналу. Используя применяются (это, аргументы) гарантирует, что вызывающая сторона не будет в состоянии заметить различие между оригиналом и проксированным методом.
Спасибо, ребята, шаблон прокси действительно помог ..... На самом деле я хотел вызвать глобальную функцию foo .. На определенных страницах мне нужно сделать несколько проверок. Я сделал следующее.
//Saving the original func
var org_foo = window.foo;
//Assigning proxy fucnc
window.foo = function(args){
//Performing checks
if(checkCondition(args)){
//Calling original funcs
org_foo(args);
}
};
Спасибо, это действительно помогло мне
Переопределить функцию можно, используя конструкцию типа:
function override(f, g) {
return function() {
return g(f);
};
}
Например:
a = override(a, function(original_a) {
if (condition) { new_code(); original_a(); }
else { original_a(); other_new_code(); }
});
Правка: Исправлена опечатка.