{"id":6,"date":"2007-10-01T11:31:51","date_gmt":"2007-10-01T18:31:51","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/2007\/10\/01\/overloading-e-overriding-no-javascript\/"},"modified":"2020-07-03T14:41:12","modified_gmt":"2020-07-03T17:41:12","slug":"overloading-e-overriding-no-javascript","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2007\/10\/01\/overloading-e-overriding-no-javascript\/","title":{"rendered":"Overloading e Overriding no Javascript"},"content":{"rendered":"<p>Overriding \u00e9 a capacidade de reescrever um m\u00e9todo, em uma subclasse, que originalmente foi definido na superclasse. Prover uma diferente implementa\u00e7\u00e3o para a mesma assinatura.<\/p>\n<p>Overloading \u00e9 a capacidade de conter duas fun\u00e7\u00f5es com mesmo nome distingu\u00edveis pelo contexto.<\/p>\n<p>Javascript \u00e9 fracamente tipado e por padr\u00e3o n\u00e3o suporta overloading por n\u00e3o conseguir distinguir as assinaturas de m\u00e9todos com mesmo identificador pelo tipo de dados dos argumentos passados.<\/p>\n<p>Como javascript n\u00e3o suporta overloading, toda constru\u00e7\u00e3o de m\u00e9todos com mesmo identificador provoca um overriding seja na pr\u00f3pria classe ou em suas subclasses.<\/p>\n<p>Vejamos com a constru\u00e7\u00e3o do seguinte objeto:<\/p>\n<pre lang=\"javascript\">var Objeto = new function(){\n    return {\n        teste: function(){\n            alert(\"Sem parametros\");\n        },\n        teste: function(x, y){\n            alert(x + ' overrindig ' + y);\n        }\n    }\n}();<\/pre>\n<p>A execu\u00e7\u00e3o do metodo teste mesmo que n\u00e3o contenha par\u00e2metros apresentaria:<\/p>\n<p>&#8220;undefined overriding undefined&#8221;.<\/p>\n<p>Para contornar essa deficiencia voce pode criar um tipo de falso overloading, s\u00e3o v\u00e1rios caminhos de se fazer isso, um deles pode ser da seguinte forma:<\/p>\n<pre lang=\"javascript\">var Objeto = new function(){\n    return {\n        metodo: function(){\n            var argumentos = arguments.length;\n            switch(argumentos){\n                case 0 : alert('Function sem argumentos');<\/pre>\n<pre lang=\"javascript\">                         break;\n                case 1 : alert(arguments[0]);<\/pre>\n<pre lang=\"javascript\">                         break;\n                case 2 : alert(arguments[0] + ' - ' +\n                          arguments[1]); break;\n            }\n        }\n    }\n}();<\/pre>\n<p>Claro que n\u00e3o \u00e9 nada elegante, mas resolve. A especifica\u00e7\u00e3o do Javascript (ECMA-262) define na p\u00e1gina 39 um objeto chamado &#8220;arguments&#8221;,  que representa um array de todos os argumentos passados para uma fun\u00e7\u00e3o, independente de quantos argumentos s\u00e3o definidos na assinatura dessa fun\u00e7\u00e3o. Por meio desse objeto, voc\u00ea tem como implementar uma resposta adequada dependendo do n\u00famero de argumentos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overriding \u00e9 a capacidade de reescrever um m\u00e9todo, em uma subclasse, que originalmente foi definido na superclasse. Prover uma diferente implementa\u00e7\u00e3o para a mesma assinatura. Overloading \u00e9 a capacidade de conter duas fun\u00e7\u00f5es com mesmo nome distingu\u00edveis pelo contexto. Javascript \u00e9 fracamente tipado e por padr\u00e3o n\u00e3o suporta overloading por n\u00e3o conseguir distinguir as assinaturas [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/6"}],"collection":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/comments?post=6"}],"version-history":[{"count":1,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/6\/revisions"}],"predecessor-version":[{"id":1904,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/6\/revisions\/1904"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=6"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=6"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}