JSFiddle - React, Tailwind, and code Playground

JavaScript

function addMethod(object, name, fn) {
  
  var old = object[name]; 
  var len = fn.length;
    
  object[name] = function(){   
 
    if (fn.length == arguments.length) {      
        console.log('--------MATCH-----------------------');
        console.log('args length: ' + arguments.length + ' ----- func length: ' + fn.length);    
        console.log(arguments);
        return fn()            
    }
      
    else if (typeof old == 'function')   { 
        console.log('--------NO MATCH-----------------------');        
        console.log('args length: ' + arguments.length + ' ----- func length: ' + fn.length);
        console.log(arguments);         
        return old.apply(this, arguments);             
    }       
  }; 
}

var ninja = {}

debugger;
addMethod(ninja, 'test', function() { console.log('no params');});
addMethod(ninja, 'test', function(a) { console.log('1 params');});
addMethod(ninja, 'test', function(a, b) {console.log('2 params');});
addMethod(ninja, 'test', function(a, b, c) {console.log('3 params');});
addMethod(ninja, 'test', function(a, b, c, d) {console.log('4 params');});


ninja.test();

ninja.test('a');
ninja.test('b', 'c');
ninja.test('b', 'c', 'd');
ninja.test('b', 'c', 'd', 'e');