我有一个我无法修改的功能:
function addToMe() { doStuff(); }
我可以添加到此功能吗? 显然这种语法非常错误,但这是一般的想法......
function addToMe() { addToMe() + doOtherStuff(); }
答案 0 :(得分:41)
您可以存储对原始函数的引用,然后使用回调原始函数的函数覆盖它,并添加所需的功能:
var originalFn = addToMe;
addToMe = function () {
originalFn(); // call the original function
// other stuff
};
您可以这样做,因为JavaScript functions是first-class个对象。
编辑:如果您的函数收到参数,则应使用apply将其传递给原始函数:
addToMe = function () {
originalFn.apply(this, arguments); // preserve the arguments
// other stuff
};
您还可以使用带参数的自动执行函数表达式来存储原始函数的引用,我认为它有点清晰:
addToMe = (function (originalFn) {
return function () {
originalFn.apply(originalFn, arguments); // call the original function
// other stuff
};
})(addToMe); // pass the reference of the original function