你提到的陣列似乎是各種各樣的功能表:
var igtbl_ptsBand = ["func1", function() { }, "func2", function() { } ]
我會建議使用鏈接,而不是僅僅覆蓋。通過鏈接,您可以注入自己的代碼,但仍然會調用原始函數。假設你想替換「func2」和鏈。你可以做這樣的事情:
var origFunc, findex, ix;
if (igtbl_ptsBand.indexOf) {
// indexOf is supported, use it
findex = igtbl_ptsBand.indexOf("func2") + 1;
} else {
// Crippled browser such as IE, no indexOf, use loop
findex = -1;
for (ix = 0; ix < igtbl_ptsBand.length; ix += 2) {
if (igtbl_ptsBand[ix] === "func2") {
findex = ix + 1;
break;
}
}
}
if (findex >= 0) {
// Found it, chain
origFunc = igtbl_ptsBand[findex];
igtbl_ptsBand[findex] = function() {
// Your new pre-code here
// Call original func (chain)
origFunc();
// Your new post-code here
};
}
origFunc可以有爭論,當然,你可能想使用的JavaScript調用()函數來設置「這個指針」具體的事情,如:
origFunc.call(customThis, arg1, arg2...);
如果參數在數組中,則可以使用apply()而不是call()。
我已經與這些組件一起工作過,不知怎的,我並不驚訝他們存儲他們的功能完全回籠的方式。 – jbabey