你提到的数组似乎是一个函数表:
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 call() 函数将“this 指针”设置为特定的东西,例如:
origFunc.call(customThis, arg1, arg2...);
如果参数在数组中,则可以使用 apply() 而不是 call()。