对于那些阅读我之前发布的帖子的人来说,我是(“仍然”)在ICEFaces网络应用程序上工作。
我需要扩展ICEFaces Javascript框架创建的类的行为,特别是ToolTipPanelPopup
。
我无法修改库的源代码(否则我会实现我的目标)。 这就是ICEFaces定义类的方式(很像jQuery和其他Javascript框架)。
ToolTipPanelPopup = Class.create({
[...]
showPopup: function() {
[...]
},
updateCordinate: function(event) {
[...]
},
[...]
});
我的问题很简单
showPopup()
函数的行为以便在其结束时运行我的自定义函数?我的意思是遵循假定继承的Java示例代码
public void ShowPopup()
{
super.ShowPopup();
customMethod();
}
答案 0 :(得分:1)
这样的事情应该有效:
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
引用的函数,然后您拥有自己的代码。如果您想在之前先执行某些操作,只需调换订单{/ 1>即可调用original
。由于您正在使用闭包,original
在词法上绑定到当前作用域,并且每次调用新showPopup
时都应该可用(如果我对此有误,请有人纠正我)。
请告诉我这是否适合您。