我有一個腳本,基於特定的場景,可能需要取代函數來在最終調用原始函數之前進行一些處理。 (請參閱「'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