<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JulioGreff.net &#187; prototype</title>
	<atom:link href="http://juliogreff.net/tag/prototype/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliogreff.net</link>
	<description>A mesma web, um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sat, 07 May 2011 17:07:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Interfaces de Usuário com JavaScript</title>
		<link>http://juliogreff.net/interfaces-de-usuario-com-javascript/</link>
		<comments>http://juliogreff.net/interfaces-de-usuario-com-javascript/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 11:00:42 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Destaques]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=185</guid>
		<description><![CDATA[A web vai se tornando uma plataforma cada vez mais próximas das aplicações desktop que temos. Temos várias aplicações por aí para provar isso. Mas aos olhos do usuário, uma aplicação só com XHTML+CSS às vezes pode não ser tão interessante. De uns tempos pra cá, entretanto, várias bibliotecas surgiram para acabar com esse problema, [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
<li><a href='http://juliogreff.net/historico-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Histórico para Navegação via JavaScript'>Histórico para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/estatisticas-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Estatísticas para Navegação via JavaScript'>Estatísticas para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/jquery-segundas-impressoes/' rel='bookmark' title='Permanent Link: jQuery &#8211; Segundas Impressões'>jQuery &#8211; Segundas Impressões</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>A web vai se tornando uma plataforma cada vez mais próximas das aplicações desktop que temos. Temos várias aplicações por aí para provar isso. Mas aos olhos do usuário, uma aplicação só com XHTML+CSS às vezes pode não ser tão interessante. De uns tempos pra cá, entretanto, várias bibliotecas surgiram para acabar com esse problema, e trazer interfaces de usuários realmente interessantes. Preparado para algo fora de série?</p>
<p>O número dessas bibliotecas é incontável, algumas mais simples, outras mais complexas, outras mais famosas, algumas nem tanto. Fiz uma breve pesquisa, e trouxe as mais conhecidas (e algumas nem tanto) para quem ainda não teve a oportunidade de conhecer. Só para lembrar, hoje não vou tratar sobre o uso dessas bibliotecas, isso fica pra uma próxima oportunidade, já que a idéia é um pouco extensa.</p>
<h3>ExtJS</h3>
<p>A <a href="http://extjs.com/" title="ExtJS" rel="external">ExtJS</a> é de longe a biblioteca mais conhecida. Provavelmente você já deve ter pelo menos ouvido falar sobre, a menos que você viva na Sibéria. Também acredito que deva ser uma das mais antigas, e por isso uma das mais completas também.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/extjs.png" alt="ExtJS" title="ExtJS" /></p>
<p>Seu <a href="http://extjs.com/deploy/dev/examples/samples.html" title="ExtJS - Demos and Samples" rel="external">visual é espetacular</a>, mas tem seu preço: ela é muito lenta. Todos os efeitos de transparência, os drag &#8216;n&#8217; drops, tudo isso exige muito do pobre navegador. Pense bem antes de escolher onde usá-la, faça somente se for necessário, nunca para simples &#8220;enfeites&#8221;. Lenta, mas uma obra de arte.</p>
<p>E os desenvolvedores <abbr title="Adobe Integrated Runtime">AIR</abbr> não precisam ficar tristes: há até um <a href="http://extjs.com/blog/2008/02/24/tasks2/" title="Simple Tasks - AIR Application" rel="external">demo</a> do bichinho em funcionamento. Ainda não tive muito tempo com o AIR, mas acredito que a questão da velocidade não seja tão crítica quanto em um navegador, quem puder falar sobre, agradeço.</p>
<h3>Yahoo User Interface</h3>
<p class="left"><img src="http://juliogreff.net/wp-uploads/yui.png" alt="Yahoo User Interface" title="Yahoo User Interface" /></p>
<p>A <a href="http://developer.yahoo.com/yui/" title="Yahoo User Interface" rel="external">Yahoo User Interface</a>, ou YUI, deve ser a primeira user interface a se popularizar. Foi a base do nascimento da ExtJS. Tem lá seus defeitos, como o prefixo YUI para todos os métodos, mas tem um poder imenso. Me parece ser bem mais leve que a Ext, e usa gráficos bem mais simples também.</p>
<p>A documentação é um dos pontos fortes. Mantida pela comunidade de desenvolvedores do Yahoo, você nunca estará sozinho. Apesar disso, achei o site um pouco confuso para encontrar alguma coisa, principalmente os demos. Mas o material está lá, e há muito&#8230;</p>
<h3>MochaUI</h3>
<p>Ainda beta, a <a href="http://mochaui.com/" rel="external" title="MochaUI">MochaUI</a> seria a minha preferida. Adivinhem por quê? Sim, baseada na <a href="http://mootools.net/" title="Mootools Library" rel="external">Mootools</a>&#8230; A <a href="http://mochaui.com/demo/" title="MochaUI - Demo" rel="external">demonstração</a> realmente me deixou impressionado, talvez tenha sido o relógio.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/mochaui.png" title="MochaUI" alt="MochaUI" /></p>
<p>Aparenta ser bem leve, tanto que na demonstração você pode modificar propriedades das janelas sem travar o navegador. Usa gráficos simples, mas não menos atraentes. De longe, seria a primeira que eu escolheria para trabalhar (sim, opinião extremamente parcial). Mal posso esperar pela versão 1.0!</p>
<h3>Dijit</h3>
<p>Falando em <a href="http://dojotoolkit.org/" title="Dojo Toolkit" rel="external">Dojo</a>, nem é preciso dizer muito. O framework mais abrangente que conheço também conta com sua interface de usuário, o <a href="http://dojotoolkit.org/projects/dijit" title="Dijit" rel="external">Dijit</a>. Não consegui encontrar demonstrações no site, mas as imagens mostram algo realmente promissor.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/dijit.gif" alt="Dijit" title="Dijit" /></p>
<p>Lendo a descrição do projeto, você verá que o Dijit não é <em>apenas</em> uma simples interface de usuário. É extremamente customizável, extensível, acessível e localizável. O que isso significa? Bem, dê asas à imaginação, o céu é o limite&#8230;</p>
<h3>jQuery UI</h3>
<p>O <a href="http://ui.jquery.com/" title="jQuery UI" rel="external">jQuery UI</a>, bem jovem ainda, também é espetacular. Baseado na brilhante <a href="http://jquery.com/" rel="external" title="jQuery">jQuery</a>, tem tudo para deixar qualquer um de boca aberta. A <a href="http://ui.jquery.com/repository/real-world/effects/" title="jQuery UI Effects" rel="external">demonstração de efeitos</a>, por exemplo, me impressionou muito. A própria tela de demonstrações é uma obra de arte.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/jqueryui.png" title="jQuery UI" alt="jQuery UI" /></p>
<p>Apesar de baseada no jQuery, achei a biblioteca ligeiramente lenta. Talvez tenha sido impressão, mas não esperava isso de jQuery. Entretanto, pela sua idade, é muito madura, muito poderosa. Se jQuery não havia <a href="http://juliogreff.net/jquery-segundas-impressões/" title="jQuery - Segundas Impressões">me chamado atenção</a> ainda&#8230;</p>
<h3>Prototype UI</h3>
<p class="center"><img src="http://juliogreff.net/wp-uploads/prototypeui.png" title="Prototype UI" alt="Prototype UI" /></p>
<p>Até então desconhecido pra mim, o release candidate <a href="http://www.prototype-ui.com/" title="Prototype UI" rel="external">Prototype UI</a> não conseguiu me chamar a atenção. Não por ser baseado em <a href="http://www.prototypejs.org/" title="Prototype" rel="external">Prototype</a> e <a href="http://script.aculo.us/" title="Scriptaculous" rel="external">Scriptaculous</a> (o que já considero um ponto contra), nem por usar um tema do Mac, mas por parecer muito prematura. Os demos apresentados são bonitinhos, mas um tanto &#8220;crus&#8221;. Prefiro não dar minha opinião, vai que o negócio vire um Ext-killer?</p>
<h3>SproutCore</h3>
<p class="center"><img src="http://juliogreff.net/wp-uploads/sproutcore.png" title="SproutCore" alt="SproutCore" /></p>
<p>O <a href="http://www.sproutcore.com/" title="SproutCore" rel="external">SproutCore</a>, iniciativa da Apple, tem uma proposta um tanto &#8220;utópica&#8221;, pelo que entendi é trazer o Cocoa para a web. As demonstrações são interessantes, mas o pobre navegador sofreu as conseqüências. Esse negócio consegue ser mais pesado que a própria Ext! Além disso, vi mais opiniões <a href="http://www.pixelbox.net/2008/06/17/sprout-core/" title="SproutCore (Pixelbox)" rel="external">negativas</a> do que positivas&#8230;</p>
<h3>UIZE</h3>
<p class="center"><img src="http://juliogreff.net/wp-uploads/uize.png" title="UIZE" alt="UIZE" /></p>
<p>O <a href="http://www.uize.com/" title="UIZE" rel="external">UIZE</a> (pronuncia-se &#8220;you eyes&#8221;) é outro que nunca havia sido apresentado a mim. Concordo com o pessoal do <a href="http://ajaxian.com/archives/uize-javascript-ui-toolkit" title="UIZE: JavaScript UI Toolkit" rel="external">Ajaxian</a>: são os efeitos mais legais que já vi. Apesar disso, a biblioteca ainda necessita muito mais trabalho, já que tem poucos recursos (poucos, mas legais).</p>
<p>Não tive a oportunidade de trabalhar por algum tempo com nenhuma dessas bibliotecas, e nem falar muito sobre as quais tenho mais experiência. Somente uma breve opinião sobre cada uma. Caso tenha esquecido de alguma, por favor, cite-a nos comentários, terei prazer em falar um pouquinho. Só uma precaução: cuidado onde você irá usar tudo isso&#8230; Existem aplicações e aplicações. Até mais!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
<li><a href='http://juliogreff.net/historico-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Histórico para Navegação via JavaScript'>Histórico para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/estatisticas-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Estatísticas para Navegação via JavaScript'>Estatísticas para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/jquery-segundas-impressoes/' rel='bookmark' title='Permanent Link: jQuery &#8211; Segundas Impressões'>jQuery &#8211; Segundas Impressões</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/interfaces-de-usuario-com-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>As Vantagens de Prototype</title>
		<link>http://juliogreff.net/as-vantagens-de-prototype/</link>
		<comments>http://juliogreff.net/as-vantagens-de-prototype/#comments</comments>
		<pubDate>Sat, 09 Dec 2006 13:26:08 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/?p=44</guid>
		<description><![CDATA[Alguns não gostam, alguns adoram, outros usam de vez em quando. O prototype (não o framework), apesar de aumentar um pouco a quantidade de código, pode ser muito útil em certas aplicações. Em outras, nem tanto. Como já expliquei, o prototype não sobrescreve nada que já esteja definido, portanto, é necessário prestar atenção em um [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/funcoes-em-diferentes-escopos/' rel='bookmark' title='Permanent Link: Funções em Diferentes Escopos'>Funções em Diferentes Escopos</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/escopo-de-variaveis/' rel='bookmark' title='Permanent Link: Escopo de Variáveis'>Escopo de Variáveis</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Alguns não gostam, alguns adoram, outros usam de vez em quando. O prototype (não o framework), apesar de aumentar um pouco a quantidade de código, pode ser muito útil em certas aplicações. Em outras, nem tanto.</p>
<p>Como <a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-2" title="JavaScript Orientado a Objetos - Parte 2">já expliquei</a>, o prototype não sobrescreve nada que já esteja definido, portanto, é necessário prestar atenção em um pequenino detalhe.</p>
<p>Há uns tempos atrás, tive um certo problema com a construção do FrameWorX. Não conseguia acessar uma variável que estava fora de uma função que estava usando, mas ainda dentro da classe. Na tentativa-e-erro (leia-se <acronym title="Programação Orientada a Gambiarra">POG</acronym>), descobri como acessa-la: o prototype. O problema foi que ele não sobrescrevia o valor <code>false</code>. Portanto, nada podia ser definido.</p>
<h3>O Princípio</h3>
<p>O princípio para o prototype sobrescrever algo é o seguinte: criar esse &#8220;algo&#8221; com ele mesmo.</p>
<pre><code>function errado() {

  this.variavel = "";

}

errado.prototype.variavel = "Outra coisa"; // Assim não dá certo!

function certo() {

  // Não tem nada definido aqui dentro!

}

certo.prototype.variavel = "Outra coisa"; // Assim funciona!</code></pre>
<p>Esse método pode ser usado dentro de métodos privados para acessar variáveis públicas (meu eterno problema foi resolvido!), funções autônomas (aquelas que não tem nome, tipo window.onload = function() {&#8230;}) ou para criar toda a classe.</p>
<h3>Criando a Classe</h3>
<p>Podemos criar a classe inteira com o prototype. Os métodos e propriedades podem ser adicionados através dele, e inclusive o corpo do construtor, e nada ficaria dentro da definição da função.</p>
<p>Nesse caso, nem sempre é uma boa. Não sei quanto à questão do desempenho, mas o código fica sensivelmente maior, às vezes desnecessariamente.</p>
<p>Espero que não tenham ficado dúvidas. Qualquer coisa, comente!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/funcoes-em-diferentes-escopos/' rel='bookmark' title='Permanent Link: Funções em Diferentes Escopos'>Funções em Diferentes Escopos</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/escopo-de-variaveis/' rel='bookmark' title='Permanent Link: Escopo de Variáveis'>Escopo de Variáveis</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/as-vantagens-de-prototype/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Estendendo o JavaScript</title>
		<link>http://juliogreff.net/estendendo-o-javascript/</link>
		<comments>http://juliogreff.net/estendendo-o-javascript/#comments</comments>
		<pubDate>Sun, 22 Oct 2006 20:27:19 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/?p=19</guid>
		<description><![CDATA[Quem já acompanha o blog há mais de uma semana ou duas, notou que as postagens aumentaram de uns tempos pra cá. Os motivos que contribuiram para isso são muitos. O primeiro deles é que estou com FDQF (Falta Do Que Fazer), fim de bimestre, todos projetos terminados e entregues (os mais urgentes)&#8230; E outro [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-1/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 1'>JavaScript Orientado a Objetos &#8211; Parte 1</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/javascript-object-notation/' rel='bookmark' title='Permanent Link: JavaScript Object Notation'>JavaScript Object Notation</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Quem já acompanha o blog há mais de uma semana ou duas, notou que as postagens aumentaram de uns tempos pra cá. Os motivos que contribuiram para isso são muitos. O primeiro deles é que estou com FDQF (Falta Do Que Fazer), fim de bimestre, todos projetos terminados e entregues (os mais urgentes)&#8230; E outro que vale a pena ser citado: aumentou o incentivo para continuar escrevendo. Ontem registrei, em média, 50 visitantes, em lugar dos 18 a 25 habituais (avanço, não?). Não sei quanto vai durar, mas deu um &#8220;turbo boost&#8221; nas postagens. Cortando o papo furado, vamos ao que realmente interessa.</p>
<p>Meu propósito não é literalmente estender o JavaScript, mas sim alguns de seus objetos nativos, através da <a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-1/" title="JavaScript Orientado a Objetos - Parte 1">POO</a>, aumentando a capacidade dessa linguagem.</p>
<h3>Como estender os objetos?</h3>
<p>Você teve coragem de perguntar isso? Espero que não. Como já disse na <a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-2/" title="JavaScript Orientado a Objetos - Parte 2">parte 2 sobre JavaScript OO</a>, estendemos qualquer objeto através de <code>prototype</code>. Qualquer objeto <strong>mesmo</strong>, seja ele criado por nós mesmos ou nativo do JavaScript.</p>
<p>O meu objetivo aqui não é criar métodos extraordinários, é apenas estende-los, tornando algumas funções mais rápidas, economizando código. O negócio é aproveitar ao máximo os recursos que a linguagem nos dá.</p>
<h3>Estendendo o Array</h3>
<p>O objeto array é muito utilizado na programação. Hoje daremos um uso &#8220;incomum&#8221; para ele. Transformaremos ele em uma query string. Não é nada muito avançado, já que o JavaScript não nos dá tantas opções. O resultado será: 0=java&amp;1=script, ou seja, um parâmetro (índice numérico do array) com seu valor (valor do array). Vamos ao trabalho:</p>
<pre><code>var nossoArray = new Array("java","script");	// Aqui é o nosso array
Array.prototype.toQueryString = function() { };</code></pre>
<p>Como diria Jack Estripador, vamos por partes. Primeiramente, criamos um simples array. A segunda linha que é o grande segredo: estendemos o objeto array, adicionando um método <code>toQueryString</code>. Fácil como tirar um doce de uma criança.</p>
<p>É, realmente muito fácil. A parte complicada vem exatamente agora. Depois dela tudo fica fácil novamente. Não é exatamente parte do script, mas sim uma questão de lógica. E a pergunta que vale 1 milhão é: &#8230; &#8230; &#8230; como vamos pegar os valores do array, se não passamos nenhum argumento, o array não pode ser acessado por <code>nossoArray</code> (até pode, mas a POO vai por água abaixo, o objetivo é a reutilização de código), e agora?</p>
<p>Analisemos: quando criamos um array, o que ele retorna?</p>
<pre><code>var nossoArray = new Array("java","script");
alert(nossoArray); // Retorno do Array</code></pre>
<p>Isso mesmo, um objeto array retorna ele mesmo. Como referenciamos algo que se refere a si mesmo? <code>this</code>. Agora a parte fácil: juntar tudo com &#8220;&amp;&#8221;. Vamos preencher nossa função:</p>
<pre><code>var nossoArray = new Array("java","script");	// Aqui é o nosso array
Array.prototype.toQueryString = function() {
	var queryString = "";
	for(var i = 0; i &lt; this.length; i++) {
		if(this[i].indexOf("&amp;") &lt; 0 &amp;&amp; queryString.length &gt; 0) queryString += "&amp;" + i + "=" + this[i];
		else queryString += i + "=" + this[i];
	}
	return queryString;
};
var nossaQueryString = nossoArray.toQueryString();
alert(nossaQueryString);</code></pre>
<p>Nada de complicado. Como já disse esses dias: <a href="http://juliogreff.net/pense-mais-e-codifique-menos/" title="Pense Mais e Codifique Menos">pensar é a alma do negócio</a>. Pode não ser, e realmente não é, a melhor função que você já viu na vida, mas se você entender o conceito, terá um mundo de aventuras pela frente.</p>
<h3>Estendendo Strings</h3>
<p>Agora vamos fazer o reverso do nosso método. Transformar query strings em arrays associativos. Como já sabemos, o objeto <code>String</code> retorna a string em si, como nos arrays. Vamos aplicar isso em nosso método:</p>
<pre><code>String.prototype.toArray = function() {
	var arrayQuery = Array();
	var tempArray = this.split("&amp;");
	for(var i = 0; i &lt; tempArray.length; i++) {
		var anotherArray = tempArray[i].split("=");
		arrayQuery[anotherArray[0]] = anotherArray[1];
	}
	return arrayQuery;
}</code></pre>
<p>Mais simples ainda, e mais eficiente, já que os índices do array retornado aqui também podem ser strings (<code>nossoArray['primeiro_par']</code>). Acho que não há nada de extraordinário. Vamos adiante.</p>
<h3>Estendendo Objetos</h3>
<p>Objetos são as coisas mais complicadas de se estender. Quase tudo em JavaScript pode ser tratado como um objeto. Trabalharemos aqui somente com tags, os objetos DOM. Adicionaremos um método que transforma um elemento para negrito, ou para fonte normal.</p>
<p class="post-warn">Essa técnica foi testada apenas no Firefox. Para estender objetos DOM de uma maneira cross-browser, leia: <a href="http://juliogreff.net/estendendo-objetos-dom/" title="Estendendo Objetos DOM">Estendendo Objetos DOM</a>.</p>
<p>Como temos que desobrir com qual objeto estamos trabalhando, devemos nos assegurar que trabalhamos com uma tag. Lembre-se de testar o objeto com o qual se trabalha, para ter certeza de que não haverá funcionamento indesejado.</p>
<p>Nosso código:</p>
<pre><code>Object.prototype.Strong = function(bold) {
	if(this.tagName) {	// Se for tag...
		var weight = bold == true ? "bold" : "normal";	// True = bold; false = normal
		this.style.fontWeight = weight;		// Aplicando o estilo
	}
	return this;	// Retornando o elemento
}</code></pre>
<p>O objeto seria algo do tipo <code>document.getElementById()</code>. Não funciona no IE, servindo só pra exemplo mesmo (quem souber fazer funcionar no IE e puder me dizer eu agradeço).</p>
<p>Outros objetos tornam-se mais difíceis de serem estendidos. Resta a você aprender a utilizar. Existe uma infinidade de coisas para se aprender ainda.</p>
<p>Ressaltando: nota agora a vantagem de se usar a POO? O código pode ser reutilizado em muitas situações, inclusive o próprio código nativo. Boa sorte no desbravamento do mundo prototype!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-1/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 1'>JavaScript Orientado a Objetos &#8211; Parte 1</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/javascript-object-notation/' rel='bookmark' title='Permanent Link: JavaScript Object Notation'>JavaScript Object Notation</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/estendendo-o-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

