我有一个脚本,基于特定的场景,可能需要取代函数来在最终调用原始函数之前进行一些处理。 (请参阅“'overriding' Javascript Function”)动态替换不在全局范围内的函数
我一般可以得到这个工作 - 在这里是一个使用jQuery插件Tinyscrollbar(不是我预期的应用,只是一些快速和容易的说明)一个简单的例子:
(function ($) {
// Snip..
function initalize() {
oSelf.update();
setEvents();
return oSelf;
}
// Snip..
function setEvents() {
(function() {
var oldInit = wheel;
wheel = function (oEvent) {
console.log('Intercept');
oldInit(oEvent);
}
})();
// Original event code, irrelevant to question
}
function wheel(oEvent) {
// Actual function, related to using the mousewheel
}
})(jQuery);
当我滚动鼠标滚轮,控制台打印“拦截”,滚动条按原定义移动。精彩!
但是,函数名是硬编码的,并不在全局范围内,所以window []不可用(我喜欢)。是否有任何可能的黑魔法,'new Function()'和/或其他方式组合循环遍历潜在的函数名称列表(可能会根据其他逻辑进行更改)并将它们封装在这个(或类似的内部函数)精神)的态度?
在此先感谢!
够公平的,我非常感谢回应。对于它的价值,我的实际应用程序没有尝试取代bind() - s,所以至少很多疯狂不适用;但绝对值得指出。通过在init() - 时间引用的对象属性中编写覆盖函数,我能够实现我的目标;不是超级时尚的生成代码,但它完成了工作,因为没有太多人担心。 – Morgon 2011-04-29 01:59:39