Is there a way to wrap all JavaScript methods with a function?

后端 未结 3 1278
梦谈多话
梦谈多话 2020-12-05 08:34

I want to wrap every function call with some logging code. Something that would produce output like:

func1(param1, param2)
func2(param1)
func3()
func4(param         


        
相关标签:
3条回答
  • 2020-12-05 08:49

    jquery-aop might do the trick?

    0 讨论(0)
  • 2020-12-05 09:03

    Maybe you could have a function to which you pass the function to execute as a parameter:

    function runner(func_to_run) {
        alert('about to run ' + func_to_run.name);
    
        func_to_run();
    
    }
    
    function test() {
        alert ('in test');
    }
    
    runner(test)
    
    0 讨论(0)
  • 2020-12-05 09:14

    A simple approach would be something like this

    var functionPool = {} // create a variable to hold the original versions of the functions
    
    for( var func in window ) // scan all items in window scope
    {
      if (typeof(window[func]) === 'function') // if item is a function
      {
        functionPool[func] = window[func]; // store the original to our global pool
        (function(){ // create an closure to maintain function name
             var functionName = func;
             window[functionName] = function(){ // overwrite the function with our own version
             var args = [].splice.call(arguments,0); // convert arguments to array
             // do the logging before callling the method
             console.log('logging: ' + functionName + '('+args.join(',')+')');
             // call the original method but in the window scope, and return the results
             return functionPool[functionName].apply(window, args );
             // additional logging could take place here if we stored the return value ..
            }
          })();
      }
    }
    

    To undo you would need to run the

    for (func in functionPool)
      window[func] = functionPool[func];
    

    Notes
    This handles only global functions, but you can easily extend it to handle specific objects or methods etc..

    0 讨论(0)
提交回复
热议问题