Как-то так должно работать:
var original = ToolTipPanel.showPopup;
ToolTipPanel.showPopup = function() {
original(); //this is kind of like the call to super.showPopup()
//your code
};
Я опробовал этот тривиальный пример в Firebug, и, похоже, он работает:
var obj = {
func: function() {
console.log("foo");
}
};
obj.func();
var original = obj.func;
obj.func = function() {
original();
console.log("bar");
};
obj.func();
Вывод Firebug:
foo
foo
bar
Итак, здесь происходит сохранение ссылки на исходную функцию showPopup
.Затем вы создаете замыкание и присваиваете его обратно showPopup
.Оригинальный showPopup
не потерян, потому что у вас все еще есть ссылка на него в original
.В замыкании вы вызываете функцию, на которую ссылается original
, и затем у вас есть собственный код.Просто поменяйте местами ордер, если вы хотите сделать что-то сначала до , на который вы позвоните original
.Поскольку вы используете замыкание, original
лексически привязан к текущей области и должен быть доступен каждый раз, когда вызывается новый showPopup
(если я ошибаюсь, кто-то, пожалуйста, поправьте меня).
Дайте мне знать, если это сработает для вас.