编辑:好的,我相信以下解决方案是有效的:
使用 jQuery AOP 插件。它基本上将旧函数与钩子一起包装成一个函数三明治,并将其重新分配给旧函数名。这会导致每个新添加的钩子都嵌套函数。
如果 jQuery 不适合你,那就盗版源码吧,插件里面好像没有 jQuery 依赖,而且源码简单而且很小。有一个描述所有钩子及其目标的对象和一个用于存储初始未修改函数的对象。添加新钩子时,将围绕原始函数重做包装,而不是重新包装先前的包装函数。
您转义嵌套函数,并获取两个对象来处理。如果您经常无序地添加/删除钩子,这也可能意味着更容易处理钩子。
我会选择第一个,因为它已经完成了,我不用担心性能。并且由于原有功能不受影响,即使我切换钩子方法,我只需要重新添加钩子,这可能只是一些简单的搜索和替换操作。
你好,
是否有可能创建一种机制,其中函数 A 可能有一组钩子(将在函数 A 之前/之后执行的函数)?
理想情况下,函数 A 不会意识到挂钩功能,因此我不必修改函数 A 的源代码来调用挂钩。就像是:
A = function(){
alert("I'm a naive function");
};
B = function(){
alert("I'm having a piggyback ride on function A!"+
"And the fool doesn't even know it!");
};
addHook(B, A)//add hook B to function A
A()
//getting alerts "I'm a naive function"/"I'm having a
//piggyback ride on function A! And the fool doesn't even know it!"
几个小时以来,我一直在尝试破解某些东西,但到目前为止还没有运气。