Como implementar a sobrecarga de métodos no JS? Isso envolve três questões
1. O problema de chamar funções de mesmo nome
2. Parâmetros especiais na função
3. Como usar argumentos para implementar a sobrecarga de métodos
1. O problema de chamar funções de mesmo nome
Todo mundo sabe que, se houver várias funções com o mesmo nome em JS, o último será usado sempre que ligar. JS na verdade não está sobrecarregado. Ou seja, se várias funções com o mesmo nome forem definidas, o parâmetro único será diferente. Ao ligar, JS não se importa com o número de parâmetros, mas apenas com a ordem antes e depois
Por exemplo:
função test1 (arg1) {alert ("Parâmetro 1:"+arg1); } função test1 (arg1, arg2, arg3) {alert ("parâmetro 1:"+arg1+"parâmetro 2:"+arg2+"parâmetro 3:"+arg3); } // Função de código de teste Test () {test1 ("1")}Embora tenhamos chamado o teste1 ("1"), passando um parâmetro, a chamada real é test1 (arg1, arg2, arg3) e não chamamos um método com apenas um parâmetro porque passamos um parâmetro.
2. Parâmetros especiais na função
Se usarmos o seguinte código
função test1 (arg1, arg2, arg3) {alert ("parâmetro 1:"+arg1+"parâmetro 2:"+arg2+"parâmetro 3:"+arg3); } função test1 (arg1) {alert ("Parâmetro 1:"+arg1); } // Função de código de teste Test () {test1 ("1", "2")}Sabemos que a chamada é sempre Test1 (Arg1), o que significa uma função com apenas um parâmetro, mas como aprovar outros parâmetros?
Isso requer o uso de parâmetros especiais nos argumentos da função, que contêm todos os parâmetros passados para a função
função test1 () {var text = ""; for (var i = 0; i <argumentos.length; i ++) {text+= "parâmetros"+i+":"+argumentos [i]; } alerta (texto); } // Função do código de teste Test () {test1 ("1"); test1 ("1", "2"); test1 ("1", "2", "3"); }Após o teste, verificou -se que os argumentos contêm todos os parâmetros passados para a função, e os argumentos. O comprimento varia de acordo com o número de parâmetros reais passados e os argumentos.
3. Como implementar a sobrecarga de funções no JS?
Após os testes acima, verificou -se que a sobrecarga de funções não pode ser implementada diretamente no JS, mas existe uma maneira de obter efeitos de sobrecarga semelhantes?
Sim, use principalmente argumentos
Por exemplo:
função test1 () {var text = ""; if (argumentos.Length == 1) {// chamando um método de um parâmetro} else if (argumentos.length == 2) {// chamando um método de dois parâmetros} else {// outros métodos}}}