Padrões JavaScript Stoyan Stefanov



Documentos relacionados
Desenvolvimento de Grandes Aplicações Web

Jonathan Stark Brian Jepson

Padrões de Projeto em PHP

Google Analytics Justin Cutroni

PDF Explicado John Whitington

Novatec Editora Ltda. [2014].

Novatec Editora Ltda

jquery Cookbook Comunidade de Desenvolvedores jquery

Aprendendo. Unix no OS X. Mountain Lion. Mergulhando no Terminal e no Shell. Dave Taylor. Novatec

Design Centrado no Usuário

A Arte de SEO. Eric Enge, Stephan Spencer, Jessie Stricchiola e Rand Fishkin Introdução de John Battelle. Novatec

Desenvolvendo Websites com PHP

Padrões JavaScript Stoyan Stefanov

Equipes de Software. Um guia para o desenvolvedor de software se relacionar melhor com outras pessoas. Brian W. Fitzpatrick Ben Collins-Sussman

Keith Wood. Apresentação de Dave Methvin. Novatec

Primeiros Passos com o Raspberry Pi

Julia Elman e Mark Lavin. Novatec

Criando Aplicações PHP com. Zend e Dojo. Flávio Gomes da Silva Lisboa. Novatec

Aprendendo Programação. ios. Alasdair Allan. Novatec

David Hows Peter Membrey Eelco Plugge

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Luiz Carlos Querino Filho

Aprendendo Cocoa com Objective-C Paris Buttfield-Addison Jonathon Manning

Gerenciamento. de projetos. Bart Gerardi. Novatec. Como evitar problemas previsíveis para o sucesso do projeto

Crie Seu Próprio Site

JavaScript. de Alto Desempenho. Nicholas C. Zakas. Novatec

Pete Goodliffe. Novatec

Scrum em Ação. Gerenciamento e Desenvolvimento Ágil de Projetos de Software. Andrew Pham Phuong-Van Pham. Novatec

Primeiros Passos com o Netduino

Introdução às. Expressões Regulares. Michael Fitzgerald. Novatec

Pramod J. Sadalage Martin Fowler

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Mineração de dados da web social Matthew A. Russell

Pré-requisito Ter realizado os cursos de Lógica de Programação e HTML5 e CSS3, ou ter conhecimento equivalentes.

Desenvolvendo Websites com PHP

Criando Relatórios com PHP

Brandon Rhodes John Goerzen

Laboratórios de Tecnologias. Cisco. em Infraestrutura de Redes. Samuel Henrique Bucke Brito. Novatec

Google Android para Tablets

Wilson Moraes Góes. Novatec

2ª EDIÇÃO. André Milani. Novatec

Novatec Editora Ltda

Criando Aplicações Gráficas com PHP

Josh Pauli Revisão técnica Scott White. Novatec

Wilson Moraes Góes. Novatec

As Leis Fundamentais do Projeto de Software

Paulo Strelczuk. Novatec

JQuery. A Biblioteca do Programador JavaScript. 3ª Edição Revisada e ampliada. Maurício Samy Silva. Novatec

Lojas Virtuais com. Magento. André Nobrega Gugliotti. Novatec

Service Desk Corporativo

Ademir C. Gabardo. Novatec

Copyright 2008, 2013 da Novatec Editora Ltda.

Desenvolvimento de Grandes Aplicações Web

Ryan Mitchell. Novatec

A Arte de Escrever Programas Legíveis

Harrison Kinsley Will McGugan

Desenvolvendo para. Windows 8. Aprenda a desenvolver aplicativos para Windows Phone 8 e Windows 8. Ricardo R. Lecheta. Novatec

Adail Henrique Spínola Horst Aécio dos Santos Pires André Luis Boni Déo. Novatec

Introdução ao GitHub Peter Bell e Brent Beer

Ricardo R. Lecheta. Novatec

Ricardo Kléber M. Galvão. Novatec

João Eriberto Mota Filho

Primeiros Passos com Sensores Kimmo Karvinen Tero Karvinen

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

Rails 3 Básico Cloves Carneiro Jr. Rida Al Barazi

Josh Lockhart. Novatec

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Expressões Regulares Cookbook Jan Goyvaerts Steven Levithan

MARKETING DIGITAL NA ERA. Martha Gabriel CONCEITOS, PLATAFORMAS E ESTRATÉGIAS. Novatec

Empresa. Dave Gray. Novatec. com Thomas Vander Wal

Google Android para Tablets

Guia Prático Richard E. Silverman

Sumário. Prefácio Capítulo 1 Orientação e primeiras etapas Capítulo 2 Dados: trabalhando com texto e números... 40

Ricardo Lino Olonca. Novatec

Defenda sua base com circuitos simples, Arduino e Raspberry Pi

Shyam Seshadri & Brad Green

Guia do Programador Joel Saade

Josh Lockhart. Novatec

Hélio Engholm Jr. Novatec

como acabar com sua em apenas 140 caracteres Carolina Lima Novatec

Ricardo R. Lecheta. Novatec

Semmy Purewal. Novatec

Camila Porto. Novatec

Excel Avançado. 2ª Edição. Antonio Fernando Cinto Wilson Moraes Góes. Novatec

Shelley Powers. Novatec

Python Cookbook David Beazley Brian K. Jones

2ª Edição Alexandre Keller

Miguel Grinberg. Novatec

Laboratórios de Tecnologias. Cisco. em Infraestrutura de Redes. 2a Edição. Samuel Henrique Bucke Brito. Novatec

Guia do Programador Joel Saade

Ricardo Lino Olonca. Novatec

Allen B. Downey. Novatec

UML 2 uma abordagem prática Gilleanes T. A. Guedes

Zend. Framework. Componentes Poderosos para PHP. Flávio Gomes da Silva Lisboa. Novatec

Programando o Android Zigurd Mednieks, Laird Dornin, G. Blake Meike e Masumi Nakamura

Murillo Lo Visco. Novatec

Criando Relatórios com PHP Pablo Dall Oglio

Conrado Adolpho. Novatec

Transcrição:

Padrões JavaScript Stoyan Stefanov Novatec

Authorized Portuguese translation of the English edition of titled JavaScript Patterns, First Edition, ISBN: 978-0- 596-80675-0 2010, Stoyan Stefanov. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês do título JavaScript Patterns, First Edition, ISBN: 978-0- 596-80675-0 2010, Stoyan Stefanov. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. Novatec Editora Ltda. 2011. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Edgard Damiani Revisão gramatical: Carla Mello Moreira Editoração eletrônica: Camila Kuwabata e Carolina Kuwabata ISBN: 978-85-7522-266-9 Histórico de impressões: Janeiro/2011 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Dados Internacionais de Catalogaç o na Publicaç o (CIP) (C mara Brasileira do Livro, SP, Brasil) Stefanov, Stoyan Padr es JavaScript / Stoyan Stefanov ; [traduç o Edgard Damiani]. -- S o Paulo : Novatec Editora ; Sebastopol, CA. : O«Reilly, 2010. T tulo original: JavaScript patterns. ISBN 978-85-7522-266-9 1. JavaScript (Linguagem de programaç o para computadores) I. T tulo. 10-13324 CDD-005.133 êndices para cat logo sistem tico: 1. JavaScript : Linguagem de programaç o : Computadores : Processamento de dados 005.133 OGF_20101207

Sumário Prefácio...13 Capítulo 1 Introdução...17 Padrões... 17 JavaScript: conceitos... 19 Orientado a objeto... 19 Sem classes...20 Protótipos...20 Ambiente... 21 ECMAScript 5... 21 JSLint...22 Objeto console...23 Capítulo 2 Conceitos básicos...25 Escrevendo código manutenível...25 Minimizando globais...26 O problema das variáveis globais...27 Efeitos colaterais de quando se esquece var...28 Acessando o objeto global...29 Padrão var único (single var)...30 Hoisting: o problema das declarações var espalhadas... 31 Loops for... 32 Loops for-in...34 (Não) expandir protótipos embutidos...36 Padrão switch... 37 Evitar conversões de tipo implícitas...38 Evite eval()...38 Conversão de números com parseint()...40 Convenções de programação... 41 Endentação... 41 Chaves...42 Localização da chave de abertura...43 Espaços em branco...44 Convenções de nomeação...45 Construtores iniciados com maiúsculas...46 Separação de palavras...46 Outros padrões de nomeação...46 Escrevendo comentários...48 7

8 Padrões JavaScript Escrevendo documentos de API...48 Exemplo no YUIDoc...49 Escrevendo para ser lido...53 Revisões por pares...54 Minificando (n)a produção...54 Execute o JSLint...55 Resumo...56 Capítulo 3 Literais e construtores...57 Objeto literal...57 Sintaxe de objeto literal...58 Objetos a partir de um construtor...59 Pegadinha do construtor Object...60 Funções construtoras customizadas...60 Valores de retorno dos construtores...62 Padrões que impõem o uso de new...63 Convenção de nomeação...63 Usando that...64 Construtor autoinvocável...64 Array literal...65 Sintaxe de array literal...66 Curiosidades do construtor Array()...66 Verificando a natureza de um array... 67 JSON...68 Trabalhando com o JSON...68 Expressão regular literal...69 Sintaxe literal de expressão regular...70 Encapsuladores primitivos... 71 Objetos de erro...72 Resumo...73 Capítulo 4 Funções...75 Conceitos básicos...75 Esclarecimentos sobre a terminologia...76 Declarações versus expressões: nomes e hoisting...78 Propriedade name da função...78 Hoisting de função...79 Padrão callback... 81 Um exemplo de callback... 81 Callbacks e escopo...83 Listeners de eventos assíncronos...85 Intervalos (timeouts)...85 Callbacks em bibliotecas...86 Retornando funções...86 Funções autodefiníveis...87

Sumário 9 Funções imediatas...88 Parâmetros de uma função imediata...89 Valores retornados de funções imediatas...90 Benefícios e utilização... 91 Inicialização de um objeto imediato...92 Ramificação em tempo de inicialização...94 Propriedades de função Um padrão de memoização...96 Objetos de configuração...97 Curry...99 Aplicação de função...99 Aplicação parcial... 100 Currying...101 Quando usar o currying... 104 Resumo... 104 Capítulo 5 Padrões de criação de objetos...106 Padrão de namespace... 106 Função-namespace de propósito geral... 108 Declarando dependências... 109 Propriedades e métodos privados... 111 Membros privados... 111 Métodos privilegiados...112 Falhas na privacidade...112 Objetos literais e privacidade... 114 Protótipos e privacidade...115 Revelando funções privadas como métodos públicos...115 Padrão de módulo...117 Padrão de módulo de revelação...119 Módulos que criam construtores...119 Importando globais para dentro de um módulo... 120 Padrão de sandbox...121 Um construtor global...121 Adicionando módulos... 123 Implementando o construtor... 124 Membros estáticos... 125 Membros estáticos públicos... 126 Membros estáticos privados... 127 Constantes de objeto... 129 Padrão de encadeamento... 131 Prós e contras do padrão de encadeamento... 132 Método method()... 132 Resumo... 134 Capítulo 6 Padrões de reutilização de código...135 Clássico versus moderno: padrões de herança... 135 Resultado esperado quando se usa herança clássica... 136

10 Padrões JavaScript Padrão clássico 1 padrão comum...137 Seguindo a cadeia de protótipos...137 Problemas no uso do padrão 1... 140 Padrão clássico 2 Rent-a-Constructor (aluga-se um construtor)... 140 A cadeia de protótipos... 141 Herança múltipla por empréstimo de construtores... 142 Prós e contras do padrão de empréstimo de construtor... 143 Padrão clássico 3 Aluga e define (rent and set) o protótipo... 143 Padrão clássico 4 Compartilhe o protótipo...145 Padrão clássico 5 um construtor temporário... 146 Armazenando a superclasse...147 Redefinindo o ponteiro do construtor...147 Klass... 149 Herança prototípica...151 Discussão... 153 Inclusão na ECMAScript 5... 154 Herança por cópia de propriedades... 154 Mix-ins... 156 Métodos emprestados... 157 Exemplo: emprestando de um array... 158 Empresta e liga (borrow and bind)... 158 Function.prototype.bind()... 160 Resumo...161 Capítulo 7 Padrões de projeto...162 Singleton... 162 Usando new... 163 Instância em uma propriedade estática... 164 Instância em um closure... 164 Fábrica (Factory)... 167 Fábrica de objetos embutida... 169 Iterador (Iterator)... 170 Decorador (Decorator)... 172 Utilização... 172 Implementação... 173 Implementação usando uma lista...175 Estratégia (Strategy)... 177 Exemplo de validação de dados... 177 Fachada (Façade)... 180 Proxy... 182 Um exemplo... 182 Proxy como cache... 189 Mediador (Mediator)... 190 Exemplo de mediador...191

Sumário 11 Observador (Observer)... 193 Exemplo 1: Assinatura de revista... 194 Exemplo 2: o jogo de pressionamento de teclas... 197 Resumo...201 Capítulo 8 DOM e padrões de navegador...203 Separação de interesses (separation of concerns)... 203 Script em DOM...205 Acesso ao DOM...205 Manipulação do DOM...206 Eventos...208 Tratamento de eventos...208 Delegação de eventos...210 Scripts de execução longa...212 settimeout()...212 Web workers...212 Script remoto...213 XMLHttpRequest...213 JSONP...215 Frames e sinalizadores de imagens...218 Implantando JavaScript...219 Combinando scripts...219 Minificando e comprimindo... 220 Cabeçalho Expires... 220 Usando uma CDN...221 Estratégias de carregamento...221 Lugar do elemento <script>... 222 HTTP em bloco... 223 Elemento <script> dinâmico para downloads não bloqueadores... 225 Carregamento preguiçoso... 227 Carregamento sob demanda... 227 Precarregando o JavaScript... 229 Resumo...231 Índice remissivo...232