Overloading e Overriding no Javascript

{ October 1st, 2007 }


cmilfont

Autor: cmilfont

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.

Categories: JavaScript ~ ~ Trackback


Assine os coment√°rios deste artigo.


5 Responses to “Overloading e Overriding no Javascript”

  1. 1
    Destilando o XMLHttpRequest - CMilfont Tech

    […] método "open" é overloaded na Interface, apesar de não existir overloading em javascript. Leve em consideração que é um só, na implementação o […]

  2. 2
    Resumo javascript - Jan 2008 - CMilfont Tech

    […] http://www.milfont.org/tech/2007/10/01/overloading-e-overriding-no-javascript/ […]

  3. 3
    Introdução ao Ext - CMilfont Tech

    […] entre outras coisas. Seus componentes s√£o constru√≠dos com t√©cnicas modernas de orienta√ß√£o a objetos no javascript e manipula√ß√£o de Scripttag para recursos remotos que n√£o suportam […]

  4. 4
    Orientação a Objetos em Javascript - Milfont Consulting

    […] Overloading e overriding no Javascript If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.Categories: JavaScript, Orienta√ß√£o a Objetos ~ ~ Trackback Assine os coment√°rios deste artigo. […]

  5. 5
    Eduardo Ottaviani

    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

Leave a Reply