Overriding é a capacidade de reescrever um método, em uma subclasse, que originalmente foi definido na superclasse. Prover uma diferente implementação para a mesma assinatura.
Overloading é a capacidade de conter duas funções com mesmo nome distinguíveis pelo contexto.
Javascript é fracamente tipado e por padrão não suporta overloading por não conseguir distinguir as assinaturas de métodos com mesmo identificador pelo tipo de dados dos argumentos passados.
Como javascript não suporta overloading, toda construção de métodos com mesmo identificador provoca um overriding seja na própria classe ou em suas subclasses.
Vejamos com a construção do seguinte objeto:
var Objeto = new function(){
return {
teste: function(){
alert("Sem parametros");
},
teste: function(x, y){
alert(x + ' overrindig ' + y);
}
}
}();
A execução do metodo teste mesmo que não contenha parâmetros apresentaria:
“undefined overriding undefined”.
Para contornar essa deficiencia voce pode criar um tipo de falso overloading, são vários caminhos de se fazer isso, um deles pode ser da seguinte forma:
var Objeto = new function(){
return {
metodo: function(){
var argumentos = arguments.length;
switch(argumentos){
case 0 : alert('Function sem argumentos');
break;
case 1 : alert(arguments[0]);
break;
case 2 : alert(arguments[0] + ' - ' +
arguments[1]); break;
}
}
}
}();
Claro que não é nada elegante, mas resolve. A especificação do Javascript (ECMA-262) define na página 39 um objeto chamado “arguments”, que representa um array de todos os argumentos passados para uma função, independente de quantos argumentos são definidos na assinatura dessa função. Por meio desse objeto, você tem como implementar uma resposta adequada dependendo do número de argumentos.
Pingback: Destilando o XMLHttpRequest - CMilfont Tech
Pingback: Resumo javascript - Jan 2008 - CMilfont Tech
Pingback: Introdução ao Ext - CMilfont Tech
Pingback: Orientação a Objetos em Javascript - Milfont Consulting
Cara, usei muito seu blog para aperfeiçoar meu javascript, dei uma passada aqui e vi esse post sobre overloading de novo.
Comecei a usar um tipo de overload que não vi por aí, com certeza não fui eu quem inventou, alguém já deve ter feito isso antes.
Se puder, dá uma olhada : http://javiani.wordpress.com/2010/04/17/overload-em-javascript/
[]’s