Так что мне очень понравился этот способ делать то, что я нашел в секретах ниндзя javascript
function addMethod(object,name,fn){
var old = object[name];
object[name] = function(){
if (fn.length == arguments.length){
return fn.apply(this,arguments);
} else if(typeof old == 'function'){
return old.apply(this,arguments);
}
}
}
Затем вы используете addMethod для добавления перегруженных функций к любому объекту. Основной путаницей в этом коде для меня было использование fn.length == arguments.length - это работает, потому что fn.length - это число ожидаемых параметров, а arguments.length - это количество параметров, которые фактически вызываются с помощью функция. Причина, по которой анонимная функция не имеет аргументов, заключается в том, что вы можете передать любое количество аргументов в javascript, и язык простителен.
Мне понравилось это, потому что вы можете использовать его везде - просто создайте эту функцию и просто используйте метод в любой кодовой базе, которую вы хотите.
Это также позволяет избежать смехотворно большого оператора if / switch, который становится трудным для чтения, если вы начнете писать сложный код (принятый ответ приведет к этому).
С точки зрения минусов, я думаю, код изначально немного неясен ... но я не уверен в других?