添加到javascript函数

Pet*_*aig 21 javascript function

我有一个我无法修改的功能:

function addToMe() { doStuff(); }
Run Code Online (Sandbox Code Playgroud)

我可以添加这个功能吗?显然这种语法非常错误,但这是一般的想法......

function addToMe() { addToMe() + doOtherStuff(); }
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 42

您可以存储对原始函数的引用,然后使用回调原始函数的函数覆盖它,并添加所需的功能:

var originalFn = addToMe;

addToMe = function () {
  originalFn(); // call the original function
  // other stuff
};
Run Code Online (Sandbox Code Playgroud)

您可以这样做,因为JavaScript 函数是一流的对象.

编辑:如果您的函数接收参数,您应该使用apply将它们传递给原始函数:

addToMe = function () {
  originalFn.apply(this, arguments); // preserve the arguments
  // other stuff
};
Run Code Online (Sandbox Code Playgroud)

您还可以使用带参数的自动执行函数表达式来存储原始函数的引用,我认为它有点清晰:

addToMe = (function (originalFn) {
  return function () {
    originalFn.apply(originalFn, arguments); // call the original function
    // other stuff
  };
})(addToMe); // pass the reference of the original function
Run Code Online (Sandbox Code Playgroud)