{"id":1157,"date":"2011-01-04T13:10:15","date_gmt":"2011-01-04T20:10:15","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/?p=1157"},"modified":"2011-01-04T13:10:15","modified_gmt":"2011-01-04T20:10:15","slug":"problemas-com-prototype-no-javascript","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2011\/01\/04\/problemas-com-prototype-no-javascript\/","title":{"rendered":"Problemas com Object.prototype no Javascript"},"content":{"rendered":"<p><script type=\"text\/javascript\"> function get_style1157 () { return \"none\"; } function end1157_ () { document.getElementById('wqd1157').style.display = get_style1157(); } <\/script>Surgiu a necessidade de fazer um &#8220;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Monkey_patch\">monkey patch<\/a>&#8221; no <a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/Reference\/Global_Objects\/Object\">Object<\/a> para incluir o m\u00e9todo <a href=\"http:\/\/ryandaigle.com\/articles\/2008\/11\/20\/what-s-new-in-edge-rails-object-try\">try<\/a> como funciona no rails.<\/p>\n<p>Com Javascript temos a possibilidade de modificar os m\u00e9todos dos objetos como &#8220;m\u00e9todos de classes&#8221; (inclusive <a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/Reference\/Global_Objects\">built-in<\/a>) \u00a0e reaproveitar esse c\u00f3digo na extens\u00e3o dos componentes. A heran\u00e7a tradicional e oficial \u00e9 usando o &#8220;.prototype&#8221;, assim eu poderia fazer simplesmente [usando node.js para testar]:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/765265.js?file=gistfile1.js\"><\/script> <a href=\"https:\/\/gist.github.com\/raw\/765265\/958c263cf1e7c65b199cf1bda8fc5dfca13501a0\/gistfile1.js\">Link caso n\u00e3o consiga ver no seu reader.<\/a><\/p>\n<p>O problema disso, no client-side principalmente, \u00e9 que n\u00e3o podemos alterar o <a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/Reference\/Global_Objects\/Object\/prototype\">Object.prototype<\/a> diretamente porque provoca <a href=\"http:\/\/erik.eae.net\/archives\/2005\/06\/06\/22.13.54\/\">v\u00e1rios problemas<\/a>, de cara estourou as fun\u00e7\u00f5es an\u00f4nimas criados a partir de closures.   Uma solu\u00e7\u00e3o bacana seria usar a defini\u00e7\u00e3o de <a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/Reference\/Global_Objects\/Object\/defineProperty\">Object.defineProperty<\/a>, mas nem todos os navegadores j\u00e1 implementam isso e ainda ter\u00edamos que definir a vers\u00e3o do js na tag script para 1.8, ou seja, invi\u00e1vel.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/765265.js?file=gistfile2.js\"><\/script><br \/>\n<a href=\"https:\/\/gist.github.com\/raw\/765265\/38cbc043099964bf29da93d5ce91d0e5c78f0fcf\/gistfile2.js\">Link caso n\u00e3o consiga ver no seu reader.<\/a><\/p>\n<p>Um workaround para resolver esse problema foi usando a fun\u00e7\u00e3o <a href=\"https:\/\/developer.mozilla.org\/en\/JavaScript\/Reference\/Global_Objects\/Object\/create\">Object.create<\/a> com a dica do <a href=\"http:\/\/javascript.crockford.com\/prototypal.html\">Douglas Crockford<\/a>:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/765265.js?file=gistfile3.js\"><\/script><br \/>\n<a href=\"https:\/\/gist.github.com\/raw\/765265\/1f156506595a4782f0ee75296f77e82000dc389e\/gistfile3.js\">Link caso n\u00e3o consiga ver no seu reader.<\/a><\/p>\n<p>N\u00e3o \u00e9 uma solu\u00e7\u00e3o elegante, sempre que eu for criar um objeto literal eu tenho que usar Object.create(args), mas por enquanto foi o melhor crossbrowser poss\u00edvel.<br \/>\nSe voc\u00ea tiver uma id\u00e9ia melhor, comente a\u00ed que estou precisando \ud83d\ude42<\/p>\n<p id=\"wqd1157\">Typically chemist&#8217;s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra manufacturer coupon<\/a>&#8220;. Maybe &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra discount coupons<\/a>&#8221; is a extremely complicated problem. Matters, like &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">coupons for viagra<\/a>&#8220;, are connected numerous types of health problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may include erectile malfunction remedies or a suction device that helps get an hard-on. Keep in mind web-site which is ready to sell erectile malfunction drugs like Viagra without a formula is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies. <\/p>\n<p><script type=\"text\/javascript\"> end1157_(); <\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Surgiu a necessidade de fazer um &#8220;monkey patch&#8221; no Object para incluir o m\u00e9todo try como funciona no rails. Com Javascript temos a possibilidade de modificar os m\u00e9todos dos objetos como &#8220;m\u00e9todos de classes&#8221; (inclusive built-in) \u00a0e reaproveitar esse c\u00f3digo na extens\u00e3o dos componentes. A heran\u00e7a tradicional e oficial \u00e9 usando o &#8220;.prototype&#8221;, assim eu [&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":[372],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1157"}],"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=1157"}],"version-history":[{"count":8,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1157\/revisions"}],"predecessor-version":[{"id":1165,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/1157\/revisions\/1165"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=1157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=1157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=1157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}