Padrões JavaScript PDF
Stoyan Stefanov
Escanear para baixar
Padrões JavaScript
Dominando o Desenvolvimento de Aplicativos com
Padrões Eficazes em JavaScript
Escrito por Bookey
Saiba mais sobre o resumo de Padrões JavaScript
Ouvir Padrões JavaScript Audiolivro
Escanear para baixar
Sobre o livro
Desvende os segredos do desenvolvimento eficaz de
aplicações JavaScript com este guia essencial do especialista
Stoyan Stefanov. "Padrões JavaScript" apresenta uma coleção
abrangente de padrões de codificação e melhores práticas,
especialmente desenvolvidas para enfrentar os desafios
complexos de objetos, funções, herança e muito mais, ideal
para desenvolvedores experientes. Seja ao criar aplicações do
lado do cliente, do lado do servidor ou para desktop, você
encontrará abstrações valiosas e modelos de código que
aprimoraram suas soluções. Mergulhe em conselhos práticos e
exemplos práticos que ilustram cada padrão, enquanto também
adquire insights sobre armadilhas comuns da programação a
serem evitadas. Eleve suas habilidades em JavaScript e crie
aplicações robustas com a sabedoria de um profissional
experiente ao seu alcance.
Escanear para baixar
Sobre o autor
Stoyan Stefanov é um destacado desenvolvedor web, autor e
palestrante reconhecido por sua especialização em JavaScript e
desenvolvimento front-end. Com uma sólida formação em
ciência da computação e um profundo entendimento das
tecnologias web, Stoyan fez contribuições significativas para a
comunidade por meio de seus escritos, notavelmente o
aclamado livro "Padrões JavaScript", que explora as melhores
práticas e padrões de design para escrever código eficiente e
de fácil manutenção. Ele trabalhou com várias empresas de
tecnologia de ponta e compartilha ativamente suas percepções
sobre padrões web modernos, otimização de performance e
metodologias de programação, tornando-se uma voz respeitada
no campo do desenvolvimento JavaScript. Sua paixão pelo
ensino e sua clareza ao explicar conceitos complexos o
tornaram um recurso valioso para desenvolvedores que
buscam aprimorar suas habilidades.
Escanear para baixar
Lista de conteúdo do resumo
Capítulo 1 : Padrões JavaScript
Capítulo 2 : 2. Essenciais
Capítulo 3 : 3. Literais e Construtores
Capítulo 4 : 4. Funções
Capítulo 5 : 5. Padrões de Criação de Objetos
Capítulo 6 : 6. Padrões de Reuso de Código
Capítulo 7 : 7. Padrões de Design
Capítulo 8 : 8. Padrões DOM e de Navegador
Escanear para baixar
Capítulo 1 Resumo : Padrões JavaScript
Capítulo 1: Introdução
Visão Geral dos Padrões
Padrões são soluções comprovadas para problemas
recorrentes, funcionando como modelos que ajudam os
desenvolvedores a dividir questões complexas em
componentes gerenciáveis. Ao estudar padrões, os
desenvolvedores podem se comunicar eficazmente e
melhorar sua eficiência na codificação.
Público-Alvo
Escanear para baixar
Este livro tem como público-alvo desenvolvedores e
programadores profissionais que desejam elevar suas
habilidades em JavaScript. Presume-se que os leitores
estejam familiarizados com conceitos básicos de
programação. Tópicos avançados são explorados sob a
perspectiva de padrões.
Convenções do Livro
Certas convenções tipográficas são utilizadas:
- Itálico: Termos novos, URLs, endereços de e-mail, etc.
- Largura constante: Código e elementos de programa.
- Largura constante em negrito: Comandos a serem digitados
literalmente.
- Largura constante em itálico: Texto para valores fornecidos
pelo usuário.
- Notas e avisos são destacados para ênfase.
Uso de Exemplos de Código
Os leitores são encorajados a usar os exemplos de código
sem a necessidade de permissão prévia, desde que partes
significativas não sejam reproduzidas literalmente.
Escanear para baixar
Informações de Contato
Para comentários ou perguntas sobre o livro, os leitores
podem entrar em contato com a O’Reilly Media ou visitar a
página dedicada do livro para mais recursos.
Agradecimentos
O autor expressa gratidão a uma comunidade de
desenvolvedores e revisores que contribuíram com valiosas
insights para melhorar este trabalho.
Padrões Explicados
Os padrões na área de desenvolvimento de software
consistem em padrões de design, padrões de codificação e
antipadrões:
-
Padrões de Design
: Originalmente definidos para linguagens fortemente
tipadas, são aplicáveis, mas requerem adaptação cuidadosa
para o JavaScript.
-
Padrões de Codificação
Escanear para baixar
: Exclusivos do JavaScript, destacando as melhores práticas
que aproveitam os recursos específicos da linguagem.
-
Antipadrões
: Abordagens comuns que levam a mais problemas do que
soluções, claramente identificadas no texto.
Conceitos de JavaScript
JavaScript opera sem classes tradicionais. Em vez disso, foca
em objetos e protótipos, o que permite métodos de
codificação flexíveis e poderosos. Os conceitos principais
incluem:
-
Objetos
: Coleções de pares chave-valor, facilmente alteráveis e
podem ter métodos.
-
Protótipos
: A herança é alcançada por meio de protótipos, permitindo
que objetos compartilhem propriedades.
-
Ambiente
: JavaScript pode ser executado em vários ambientes, com
Escanear para baixar
padrões específicos adaptados para problemas relacionados a
navegadores.
Padrão ECMAScript
Este livro foca no core JavaScript, conforme delineado pelo
padrão ECMAScript, particularmente a versão 5, que
introduziu o modo estrito, aumentando a segurança do
código.
JSLint
A depuração é facilitada pelo JSLint, uma ferramenta que
verifica a qualidade do código JavaScript e incentiva a
adesão às melhores práticas.
Uso do Console
O objeto console é uma ferramenta essencial usada ao longo
do livro para exibir e testar código JavaScript em ambientes
como navegadores, ajudando a facilitar o aprendizado e a
exploração.
Em resumo, esta introdução prepara o terreno para entender
os padrões JavaScript, enfatizando a evolução e as
Escanear para baixar
características únicas da linguagem enquanto alinha práticas
modernas com conceitos de programação estabelecidos.
Escanear para baixar
Capítulo 2 Resumo : 2. Essenciais
Tópico Descrição
Escrevendo Código O custo para corrigir bugs aumenta com o tempo; o código manutenível deve ser legível, consistente,
Manutenível previsível e documentado.
Minimizando Globais Evite variáveis globais para prevenir colisões de nomes e declare variáveis com `var` para evitar
globais implícitas.
Padrão de var Única Declare múltiplas variáveis no início das funções usando uma única declaração `var` para melhorar a
legibilidade.
Otimização de Loop Armazene o comprimento de arrays em loops `for` para melhorar o desempenho e evitar acessos
repetidos.
Usando Loops for-in Use loops for-in apenas para objetos não-array e aplique `hasOwnProperty()` para filtrar
propriedades de protótipos.
Prevenindo Conversão Use igualdade estrita (`===` e `!==`) para prevenir problemas causados pela conversão de tipo
de Tipo Implícita implícita do JavaScript.
Evitando eval() Evite usar `eval()` devido a preocupações de segurança; explore melhores alternativas para acesso
dinâmico a propriedades.
Convenções de Estabeleça convenções de codificação consistentes (identação, colocação de chaves, nomenclatura)
Codificação para melhorar a legibilidade.
Escrevendo Use comentários para documentar o código e explicar lógicas complexas, mantendo-os atualizados
Comentários para evitar interpretações equivocadas.
Escrevendo Considere gerar automaticamente a documentação da API a partir dos comentários para facilitar os
Documentação de API processos de documentação.
Revisões por Pares Participe de revisões de código por pares para melhorar a qualidade do código e compartilhar
conhecimento com a equipe.
JSLint Execute o JSLint para identificar e corrigir problemas de codificação com base nas melhores práticas
discutidas no capítulo.
Resumo O capítulo enfatiza a manutenibilidade ao reduzir globais, adotar convenções de nomenclatura e
seguir práticas de codificação padrão para o sucesso a longo prazo do projeto.
Escanear para baixar
Capítulo 2: Essenciais
Este capítulo aborda as práticas recomendadas, padrões e
hábitos essenciais para escrever código JavaScript de alta
qualidade. Os principais tópicos incluem:
Escrevendo Código Manutenível
- O custo para corrigir bugs aumenta com o tempo e revisitar
código desatualizado pode ser demorado.
- Código manutenível deve ser legível, consistente, previsível
e bem documentado.
Minimizando Globais
- Variáveis globais podem levar a colisões de nomes e
problemas com scripts de terceiros.
- Sempre declare variáveis com `var` para evitar a criação de
globais implícitas.
Padrão de uma única var
- Use uma única declaração de `var` para declarar múltiplas
Escanear para baixar
variáveis no topo das funções para melhorar a legibilidade e
minimizar o risco de erros lógicos.
Otimização de Loop
- Em loops `for`, armazene o comprimento de arrays ou
coleções para evitar acessos repetidos durante iterações,
melhorando o desempenho.
Usando Loops for-in
- Loops for-in devem ser usados apenas para objetos
não-array. Use `hasOwnProperty()` para filtrar propriedades
do protótipo durante a iteração.
Prevenindo Conversão Implícita de Tipos
- Use igualdade estrita (`===` e `!==`) para evitar confusão
causada pela conversão implícita de tipos do JavaScript.
Evitando eval()
- Evite usar `eval()` devido a problemas de segurança e
melhores alternativas para acesso dinâmico a propriedades.
Escanear para baixar
Convenções de Codificação
- Estabeleça convenções de codificação consistentes para
aumentar a legibilidade e a manutenibilidade. Isso inclui
estilos de indentação, colocação de chaves e convenções de
nomenclatura.
Escrevendo Comentários
- Comentários são essenciais para documentar o código e
explicar lógica complexa. Mantenha-os atualizados para
evitar interpretações erradas.
Escrevendo Documentos de API
- Considere gerar automaticamente a documentação da API a
partir de comentários para agilizar os esforços de
documentação.
Revisões entre Pares
- Participe de revisões de código entre pares para melhorar a
qualidade do código e compartilhar conhecimento dentro da
Escanear para baixar
equipe.
JSLint
- Execute o JSLint para identificar e corrigir problemas de
codificação com base nas práticas discutidas.
Resumo
De modo geral, o capítulo enfatiza a escrita de código
manutenível por meio da redução de globais, adoção de
convenções de nomenclatura e seguimento de práticas de
codificação padrões, o que ajuda a garantir o sucesso do
projeto a longo prazo.
Escanear para baixar
Exemplo
Ponto chave:Escreva código manutenível para
facilitar futuras modificações.
Exemplo:Imagine que você está revisitando um projeto
que completou meses atrás; ao abrir o editor de código,
você se depara com uma mistura caótica de variáveis
globais e convenções de nomenclatura inconsistentes.
Cada função se espalha pela tela, com linhas que faltam
comentários ou documentação. A frustração se instala, à
medida que você percebe que o custo de corrigir essas
tramas de lógica entrelaçadas supera em muito o tempo
que teria levado para escrever um código claro e
estruturado desde o início. Agora, imagine o mesmo
projeto, mas escrito com a manutenibilidade em mente:
uso global conciso, uma única declaração var agrupando
todas as variáveis relacionadas no topo, nomenclatura
consistente e documentação completa. Você passa os
olhos pelos seus próprios comentários bem elaborados e
rapidamente compreende o propósito de cada função.
Essa clareza permite uma depuração eficiente,
possibilitando a implementação de novos recursos de
forma suave. A lição é clara: investir tempo na escrita
de código manutenível agora economiza um esforço
Escanear para baixar
significativo no futuro.
Pensamento crítico
Ponto chave:A ênfase na escrita de código
manutenível é crucial.
Interpretação crítica:Embora o autor afirme a
importância do código JavaScript manutenível, pode-se
argumentar que a necessidade de manutenibilidade pode
variar significativamente dependendo do contexto e do
escopo do projeto. O que um desenvolvedor considera
como legibilidade necessária ou padrões consistentes,
outro pode achar excessivamente prescritivo ou rígido.
Por exemplo, alguns ambientes ágeis podem priorizar o
desenvolvimento rápido em vez da estrita adesão às
convenções de codificação. Além disso, certos projetos
podem não exigir altos níveis de manutenibilidade se
forem de curta duração ou experimentais por natureza.
Este ponto de vista é corroborado por outras fontes,
como Martin Fowler em 'Refatoração', que enfatiza que
a necessidade de manutenibilidade é dependente do
contexto e pode evoluir com a maturidade da equipe e
do projeto. Portanto, os leitores não devem considerar a
perspectiva do autor como universalmente aplicável,
mas sim levar em conta seu contexto específico de
codificação e as necessidades do projeto.
Escanear para baixar
Capítulo 3 Resumo : 3. Literais e
Construtores
Capítulo 3: Literais e Construtores
Introdução
Este capítulo aborda as vantagens de usar notação literal em
JavaScript para definições de objetos, enfatizando sua
concisão, expressividade e redução de erros. Discute vários
literais, incluindo literais de objeto, array e expressão regular,
e os compara com funções construtoras integradas como
`Object()` e `Array()`. O capítulo também introduz o JSON
como um formato de transferência de dados e aprofunda-se
em construtores personalizados e seu uso adequado.
Literal de Objeto
- Objetos em JavaScript são semelhantes a tabelas hash de
pares chave-valor.
- As propriedades podem ser primitivas, funções (métodos)
Escanear para baixar
ou até mesmo outros objetos.
- Literais de objeto são mutáveis e permitem adição dinâmica
de propriedades e métodos.
- Exemplo de criação de um objeto cachorro:
```javascript
var cachorro = {};
cachorro.nome = "Benji";
cachorro.obterNome = function() { return cachorro.nome; };
```
Sintaxe do Literal de Objeto
- Sintaxe: coloque em chaves `{}`, use dois pontos para
separar nomes e valores, e vírgulas para separar
propriedades.
- Evite vírgulas finais para prevenir erros em versões mais
antigas do IE.
Métodos de Criação de Objetos
- JavaScript não possui classes, permitindo uma criação de
Instalar
objetos o aplicativo Bookey para desbloquear
flexível.
texto permitem
- Funções construtoras completo e áudio
a criação de objetos, mas
são menos preferidas do que literais.
Escanear para baixar
Capítulo 4 Resumo : 4. Funções
Capítulo 4: Funções
Introdução às Funções
Dominar funções é crucial para programadores JavaScript,
pois elas podem ser utilizadas de várias maneiras, ao
contrário de outras linguagens de programação. Este capítulo
aborda definições de funções, expressões, declarações,
escopo local, elevação de variáveis e vários padrões úteis
para melhorar APIs, reduzir variáveis globais e aumentar a
performance.
Contexto sobre Funções
As funções JavaScript têm duas características principais:
1.
Objetos de Primeiro Classe
: As funções podem ser criadas em tempo de execução,
atribuídas a variáveis, passadas como argumentos e podem
possuir propriedades e métodos.
Escanear para baixar
2.
Escopo
: As funções fornecem escopo. Variáveis declaradas com
`var` dentro de uma função são locais a essa função.
Desambiguação da Terminologia
Entender a terminologia das funções é vital. As expressões
de função podem ser nomeadas ou anônimas. A principal
diferença é que as expressões de função nomeadas permitem
acesso aos seus nomes por meio da propriedade `name`,
valiosa durante a depuração.
Declarações Versus Expressões
As declarações de função aparecem no escopo global ou
dentro dos corpos de funções. Em contraste, as expressões de
função não podem ser elevadas da mesma forma,
significando que se comportam de maneira diferente
dependendo de seu contexto.
Elevação de Funções
As declarações de função são elevadas, o que significa que
Escanear para baixar
suas definições podem ser utilizadas antes de chegar às suas
declarações no código. As expressões de função não têm esse
comportamento.
Padrão de Callback
As funções podem ser passadas como argumentos para outras
funções, conhecidas como funções de callback. O padrão de
callback permite que uma função opere em outra,
melhorando o código modular.
Trabalhando com Callbacks
Na prática, os callbacks são amplamente utilizados, como em
ouvintes de eventos. No entanto, é necessário ter cuidado
especial ao lidar com `this` dentro de um callback para evitar
comportamentos inesperados.
Retornando Funções
As funções podem retornar outras funções, permitindo a
criação dinâmica de funções. Essa técnica também pode
encapsular dados usando closures.
Escanear para baixar
Funções Auto-Definidas
Uma função pode redefinir a si mesma com base em sua
execução inicial. Isso pode ajudar na performance ao evitar
trabalho repetido.
Funções Imediatas
Funções imediatas (ou auto-invocadas) executam uma vez
quando definidas. Elas ajudam a manter um escopo limpo e
podem realizar tarefas de inicialização únicas sem poluir o
ambiente global.
Inicialização Imediata de Objetos
Esse padrão inicializa um objeto imediatamente e chama um
método `init` para tarefas de configuração dentro do contexto
daquele objeto.
Padrões de Performance
As melhorias de performance mencionadas incluem
memoização (armazenamento em cache de resultados) e
funções auto-definidas para fornecer comportamento
Escanear para baixar
iterativo otimizado.
Objetos de Configuração
Esse padrão simplifica interfaces de função para acomodar
requisitos em mudança ao longo do tempo, envolvendo
parâmetros em um único objeto.
Curry e Aplicação Parcial
Curry transforma uma função que aceita múltiplos
argumentos em uma sequência de funções que aceitam
argumentos únicos. A aplicação parcial permite que uma
função seja chamada com alguns argumentos fixos para uso
posterior.
Conclusão
Em JavaScript, entender funções e seus padrões é crítico para
uma programação eficaz. Este capítulo detalha vários
aspectos fundamentais das funções, seus usos e padrões
avançados para otimizar a funcionalidade e a
manutenibilidade do código.
Escanear para baixar
Capítulo 5 Resumo : 5. Padrões de
Criação de Objetos
Capítulo 5: Padrões de Criação de Objetos
JavaScript oferece métodos simples para criar objetos,
principalmente através de literais de objeto e funções
construtoras. No entanto, este capítulo explora padrões
adicionais para a criação de objetos que melhoram a
organização, a estrutura e a funcionalidade nas aplicações
JavaScript.
Namespaces e Organização de Objetos
Namespaces reduzem variáveis globais e previnem colisões
de nomes. Embora JavaScript não tenha uma sintaxe de
namespace incorporada, os desenvolvedores podem criar um
único objeto global (por exemplo, MYAPP) para conter
variáveis e funções específicas da aplicação. Essa prática
promove um código mais limpo e reduz o risco de conflitos.
Declaração de Dependências
Escanear para baixar
Ao usar bibliotecas modulares, declarar dependências no
início de uma função melhora a clareza e a performance. Isso
permite a identificação explícita de scripts necessários e
depende de variáveis locais para acesso mais rápido.
Propriedades e Métodos Privados
JavaScript não suporta nativamente membros privados. No
entanto, closures podem ser utilizadas para criar propriedades
privadas acessíveis apenas a métodos privilegiados. Essa
técnica assegura a encapsulação de dados críticos dentro dos
construtores.
Membros Estáticos
Métodos e propriedades estáticas, que não variam por
instância, podem ser implementados de forma eficaz usando
funções construtoras em JavaScript. Membros estáticos
permitem uma funcionalidade compartilhada sem recriar
estado.
Constantes de Objeto
Escanear para baixar
Embora JavaScript não tenha uma declaração de constante
incorporada, convenções de nomenclatura (usando
MAIÚSCULAS) podem informar os desenvolvedores sobre
valores fixos que devem permanecer inalterados. Um objeto
de constantes dedicado pode reforçar esse conceito.
Padrão de Encadeamento
Encadear métodos permite um estilo mais conciso e legível
de invocar ações sem repetir referências de objeto. Esse
padrão incentiva os desenvolvedores a criar funções menores
e mais focadas.
O Método Método
Introduzido como uma forma de simular estruturas
semelhantes a classes, a função method() permite a adição
dinâmica de métodos a construtores, facilitando um código
organizado que é lido de forma semelhante a classes
tradicionais em outras linguagens.
Resumo
O Capítulo 5 aborda vários padrões avançados de criação de
Escanear para baixar
objetos em JavaScript, como namespaces, declaração de
dependências, técnicas de privacidade, membros estáticos,
constantes, encadeamento de métodos e aprimoramento de
funções construtoras. Esses padrões não apenas fornecem
uma melhor organização, mas também aumentam a robustez
e a manutenibilidade da aplicação.
Escanear para baixar
Capítulo 6 Resumo : 6. Padrões de Reuso
de Código
Capítulo 6: Padrões de Reuso de Código
Introdução ao Reuso de Código
O reuso de código se concentra em minimizar o esforço para
escrever um novo código, utilizando código existente,
destacando a importância da herança e da composição de
objetos como estratégias para alcançar esse objetivo.
Padrões de Herança Clássica vs. Moderna
O JavaScript utiliza principalmente a herança clássica, que se
assemelha à sintaxe de linguagens com classes, enquanto
“moderna” se refere a padrões que evitam estruturas
semelhantes a classes. Os padrões clássicos são discutidos
primeiro, seguidos por alternativas modernas.
Resultado Esperado da Herança Clássica
Escanear para baixar
A herança clássica envolve a criação de construtores filhos
que herdam propriedades de construtores pais. Uma distinção
clara entre “função construtora” e “classe” é enfatizada para
evitar ambiguidades.
Padrão Clássico #1: O Padrão Padrão
O método de herança padrão envolve atribuir o protótipo de
um filho a uma nova instância do construtor pai. Este método
permite a herança de propriedades do protótipo, mas pode
introduzir desafios relacionados a propriedades de posse.
Padrão Clássico #2: Alugue um Construtor
Este padrão permite que construtores filhos utilizem o
construtor pai, passando o contexto. Ao contrário do padrão
padrão, ele copia propriedades em vez de herdá-las através da
cadeia de protótipos.
Herança Múltipla por Empréstimo de Construtores
Instalar o aplicativo Bookey para desbloquear
textodecompleto
Ao pegar emprestado e áudiovocê pode criar
vários construtores,
objetos que herdam propriedades de vários pais. Cada
Escanear para baixar
Capítulo 7 Resumo : 7. Padrões de
Design
Capítulo 7: Padrões de Design
Introdução aos Padrões de Design
Os padrões de design originaram-se do livro "Gang of Four",
oferecendo soluções para problemas comuns no design de
software orientado a objetos. Apesar de serem independentes
de linguagem, muitos padrões foram estudados
principalmente em linguagens estaticamente tipadas, como
C++ e Java. O JavaScript, uma linguagem dinâmica e
baseada em protótipos, oferece maneiras únicas de
implementar esses padrões.
Padrão Singleton
O padrão Singleton garante que uma classe tenha apenas uma
instância. No JavaScript, criar um novo objeto por meio da
sintaxe de literal de objeto gera, por natureza, um singleton,
Escanear para baixar
já que os objetos são únicos. Para implementar o Singleton
através de construtores, é essencial armazenar a instância
criada.
Padrão Factory
O padrão Factory cria objetos sem especificar o tipo exato da
classe, sendo útil em cenários onde a criação de objetos é
dinâmica. O JavaScript simplifica isso, pois sua abordagem
baseada em funções permite uma criação flexível de objetos.
O exemplo envolve uma fábrica `CarMaker` que produz
diferentes tipos de carros.
Padrão Iterator
O padrão Iterator fornece uma maneira de acessar dados
agregados, ocultando sua estrutura interna. Um objeto deve
implementar um método `next()` para facilitar o acesso
sequencial. Métodos de conveniência adicionais, como
`hasNext()` e `rewind()`, podem melhorar a usabilidade.
Padrão Decorator
O padrão Decorator permite adicionar funcionalidade a
Escanear para baixar
objetos em tempo de execução. Ao começar com um objeto
simples, os decoradores podem aprimorar seu
comportamento sem modificar a estrutura original. O padrão
utiliza um mecanismo de encadeamento para aplicar
múltiplos decoradores.
Padrão Strategy
O padrão Strategy permite selecionar algoritmos em tempo
de execução, permitindo que a mesma interface utilize
diferentes implementações, dependendo do contexto. Por
exemplo, validadores de formulários podem ser gerenciados
através de uma interface unificada, onde diferentes
estratégias de validação são executadas com base na entrada
do usuário.
Padrão Facade
O padrão Facade fornece uma interface simplificada para
sistemas complexos, ajudando a gerenciar múltiplas
chamadas de métodos com facilidade. Esse padrão é útil na
manipulação de eventos, onde várias funções podem ser
chamadas juntas, melhorando a legibilidade e a
manutenibilidade do código.
Escanear para baixar
Padrão Proxy
O padrão Proxy atua como intermediário para outro objeto,
protegendo o acesso e possivelmente melhorando o
desempenho através da inicialização preguiçosa. Ele também
pode servir como um cache para evitar operações
redundantes, reduzindo efetivamente o uso de recursos.
Padrão Mediator
O padrão Mediator facilita a comunicação entre objetos
independentes, promovendo um acoplamento frouxo. Ao
permitir que os objetos interajam por meio de um mediador,
isso evita interdependências fortes, tornando a manutenção e
as atualizações mais fáceis.
Padrão Observer
O padrão Observer promove o acoplamento frouxo através
do uso de assinantes e publicadores. Quando um publicador é
atualizado, ele notifica os assinantes, permitindo interações
dinâmicas sem conexões diretas entre os componentes. Esse
padrão é prevalente na programação orientada a eventos.
Escanear para baixar
Resumo dos Padrões Discutidos
-
Singleton
: Garante que exista uma única instância.
-
Factory
: Cria objetos com base em identificadores de string.
-
Iterator
: Navega por estruturas de dados complexas.
-
Decorator
: Adiciona funcionalidade em tempo de execução.
-
Strategy
: Seleciona algoritmos apropriados dinamicamente.
-
Facade
: Simplifica a interação com sistemas complexos.
-
Proxy
: Media o acesso a um objeto para melhoria de desempenho.
Escanear para baixar
-
Mediator
: Reduz as dependências entre objetos.
-
Observer
: Gerencia notificações entre publicadores e assinantes.
Escanear para baixar
Pensamento crítico
Ponto chave:Implementação de Padrões em
JavaScript
Interpretação crítica:O capítulo enfatiza a utilidade de
padrões como Singleton e Factory em JavaScript,
ressaltando sua adaptabilidade a um contexto de
linguagem dinâmica. No entanto, é preciso questionar se
a adesão rígida a esses padrões é sempre benéfica,
especialmente em um ambiente prototípico onde
soluções mais simples podem existir. Críticos sugerem
que, embora os padrões de design possam oferecer
abordagens estruturadas, eles também podem introduzir
uma complexidade desnecessária (Gamma et al.,
'Padrões de Design: Elementos de Software Orientado a
Objetos Reutilizáveis', 1994). Assim, os
desenvolvedores são incentivados a avaliar criticamente
quando aplicar padrões, considerando a natureza única
do JavaScript e o potencial para que recursos nativos da
linguagem sejam suficientes.
Escanear para baixar
Capítulo 8 Resumo : 8. Padrões DOM e
de Navegador
Seção Resumo
Capítulo 8: Padrões de Este capítulo foca em padrões específicos para navegadores, abordando desafios devido a
DOM e Navegador inconsistências no DOM e promovendo as melhores práticas para scripting do lado do cliente.
Separação de Distingue três áreas no desenvolvimento web: Conteúdo (HTML), Apresentação (CSS) e
Preocupações Comportamento (JavaScript) para melhorar a usabilidade e a entrega de aplicações.
Scripting de DOM Enfatiza a performance no acesso e manipulação do DOM, defendendo técnicas de otimização como
evitar loops e minimizar atualizações do DOM.
Tratamento de Recomenda o uso de ouvintes de eventos (addEventListener/attachEvent) em vez de manipuladores
Eventos inline e sugere delegação de eventos para maior eficiência.
Scripts de Longa Discute estratégias para manter a responsividade com setTimeout() para dividir tarefas e Web
Duração Workers para processamento em segundo plano.
Scripting Remoto Explora técnicas como XMLHttpRequest para comunicação assíncrona com o servidor e JSONP para
contornar restrições da política de mesma origem.
Frames e Beacons de Descreve o uso de iframes e beacons de imagem para comunicação com o servidor sem esperar uma
Imagem resposta.
Implementando Cobre considerações de performance: combinação de scripts, minificação e compressão, estratégias
JavaScript de cache e uso de CDNs.
Estratégias de Sugere colocar scripts antes da tag de fechamento e usar atributos defer/async para evitar bloquear a
Carregamento renderização da página.
Capítulo 8: Padrões DOM e de Navegador
Este capítulo muda o foco do JavaScript central
(ECMAScript) para padrões específicos de navegador,
abordando o ambiente comum para JavaScript: o navegador.
Reconhece os desafios que os desenvolvedores enfrentam
devido às inconsistências nos objetos DOM e host entre
Escanear para baixar
diferentes navegadores. O capítulo enfatiza boas práticas para
aliviar dificuldades na programação do lado do cliente e
discute vários padrões em diversas áreas:
Separação de Preocupações
A separação de preocupações distingue três áreas principais
no desenvolvimento web:
-
Conteúdo
: O documento HTML
-
Apresentação
: Os estilos CSS
-
Comportamento
: O JavaScript que lida com interações do usuário
Ao manter essas preocupações separadas, os desenvolvedores
podem melhorar a entrega de aplicações para diversos
agentes de usuário. Essa separação melhora a usabilidade e
está alinhada ao conceito de aprimoramento progressivo,
onde uma experiência básica é estabelecida primeiro
(HTML) e enriquecida conforme as capacidades do
navegador permitem.
Escanear para baixar
Programação DOM
Esta seção aprofunda-se em tarefas comuns envolvendo o
DOM, destacando as preocupações de desempenho no acesso
e manipulação do DOM:
- Para otimizar o acesso ao DOM, evite loops em chamadas
ao DOM, use variáveis locais para referências e utilize APIs
de seleção.
- Para manipulação do DOM, minimize as atualizações ao
DOM ativo agrupando mudanças e empregando fragmentos
de documento, que permitem uma criação eficiente de
subárvores antes da inserção final.
Manipulação de Eventos
O capítulo explica as complexidades dos eventos do
navegador e recomenda o uso de ouvintes de eventos em vez
de manipuladores inline para aderir ao princípio da separação
de preocupações. As principais estratégias incluem:
- Utilize `addEventListener()` para navegadores modernos e
`attachEvent()` para versões mais antigas do IE.
- Implemente delegação de eventos para minimizar o número
de ouvintes de eventos, conectando um ouvinte a um
Escanear para baixar
elemento pai que gerencia os eventos para seus elementos
filhos.
Scripts de Longa Duração
Scripts de longa duração correm o risco de afetar a
responsividade do navegador. Estratégias para manter a
responsividade incluem:
-
setTimeout()
: Dividir tarefas em partes menores para permitir que a
interface do usuário permaneça interativa.
-
Web Workers
: Usar threads em segundo plano para cálculos complexos,
permitindo que a thread principal da interface do usuário
funcione de maneira suave.
Programação Remota
Técnicas de programação remota são exploradas para
comunicação com scripts do lado do servidor sem atualizar a
página. Os métodos principais incluem:
-
Escanear para baixar
XMLHttpRequest
: Para requisições HTTP assíncronas, lidando com vários
estados e respostas.
-
JSONP
: Um método para contornar as restrições da política de
mesma origem, permitindo carregar dados de outros
domínios definindo uma função de retorno de chamada.
Frames e Imagens de Sinalização
Métodos alternativos de comunicação remota envolvem o
uso de iframes para comunicação com o servidor ou imagens
de sinalização para enviar dados sem esperar uma resposta.
Implantação de JavaScript
Considerações importantes para desempenho ao servir
JavaScript incluem:
-
Combinação de Scripts
: Reduzindo requisições HTTP ao mesclar vários arquivos de
script.
-
Escanear para baixar
Minificação e Compressão
: Diminuindo o tamanho do arquivo através da minificação e
habilitando a compressão gzip no servidor.
-
Cache
: Utilizando cabeçalhos `Expires` para controlar o cache de
arquivos JavaScript no navegador.
-
Redes de Distribuição de Conteúdo (CDN)
: Distribuindo arquivos em vários servidores globalmente
para acesso mais rápido.
Estratégias de Carregamento
É crucial manusear elementos de script com sabedoria,
garantindo que não bloqueiem a renderização da página.
Práticas sugeridas incluem colocar scripts antes da tag de
fechamento `</body>` para reduzir o bloqueio e usar
atributos como `defer` e `async` quando aplicável para
permitir downloads de script não bloqueantes.
Em resumo, o Capítulo 8 enfatiza a importância das melhores
práticas na programação de navegadores, focando na
manipulação eficiente do DOM, técnicas de manipulação de
eventos e otimização da implantação de scripts para melhor
desempenho.
Escanear para baixar
Exemplo
Ponto chave:Separação de Preocupações
Exemplo:Imagine que você está projetando uma página
da web com uma galeria de imagens envolvente. Ao
separar claramente seu HTML para a estrutura, CSS
para o estilo e JavaScript para a interatividade, você se
capacita a fazer atualizações de forma independente. Por
exemplo, quando você quiser mudar o layout de sua
galeria, pode simplesmente modificar o CSS sem
precisar tocar no HTML ou JavaScript subjacentes. Essa
prática não só torna seu processo de desenvolvimento
mais suave, mas também melhora o desempenho da
galeria em vários dispositivos, pois permite uma
melhoria progressiva. À medida que os usuários visitam
sua página, eles recebem uma experiência funcional
baseada em HTML primeiro, com beleza e
comportamento adicionais sobrepostos de forma
integrada, proporcionando uma experiência acessível a
todos.
Escanear para baixar
Melhores frases do Padrões JavaScript
por Stoyan Stefanov com números de
página
Ver no site do Bookey e gerar imagens de citações bonitas
Capítulo 1 | Frases das páginas 2-18
1.Padrões são soluções para problemas comuns.
2.Eles ajudam você a dividir um problema em blocos
semelhantes a Lego e focar nas partes únicas do problema.
3.É mais fácil dizer (e pensar), 'função imediata', do que 'essa
coisa onde você envolve a função em parênteses e no final
coloca outro conjunto de parênteses para invocar a função
bem onde você a definiu.'
4.Padrões de design são aqueles inicialmente definidos pelo
livro 'Gang of Four', publicado em 1994 sob o título
Padrões de Design: Elementos de Software Orientado a
Objetos Reutilizáveis.
5.Prefira a composição de objetos à herança de classes.
6.Antipadrões têm um som um pouco negativo ou até mesmo
insultuoso em seu nome, mas isso não precisa ser o caso.
Escanear para baixar
Um antipadrão não é o mesmo que um bug ou um erro de
codificação; é apenas uma abordagem comum que causa
mais problemas do que resolve.
Capítulo 2 | Frases das páginas -54
1.Escrever código manutenível é fundamental para o
sucesso de uma aplicação.
2.Todo ambiente JavaScript tem um objeto global acessível
quando você usa this fora de qualquer função.
3.O problema com variáveis globais é que elas são
compartilhadas entre todo o código na sua aplicação
JavaScript.
4.Uma única declaração var no topo das suas funções fornece
um único lugar para procurar todas as variáveis locais
necessárias.
5.Usar o construtor new Function() é semelhante a eval(), e
deve ser abordado com cautela.
6.É importante estabelecer e seguir convenções de
codificação—elas tornam seu código consistente, previsível
e muito mais fácil de ler e entender.
Escanear para baixar
7.A documentação de API pode ser gerada automaticamente
a partir de comentários no código.
8.Revisões entre pares poderiam ser formais e padronizadas,
até mesmo ajudadas por ferramentas especializadas, e essa
é uma ótima maneira de tornar as revisões uma parte
integrada do processo de desenvolvimento.
9.Minificação é o processo de eliminar espaços em branco,
comentários e outras partes não essenciais do código
JavaScript para diminuir o tamanho dos arquivos
JavaScript.
10.Executar JSLint no seu código é um bom padrão de
programação.
Capítulo 3 | Frases das páginas -74
1.Quando você pensa em objetos em JavaScript,
pense simplesmente em tabelas hash de pares
chave-valor (semelhante ao que é chamado de
'arrays associativos' em outras linguagens).
2.A notação de objeto literal é ideal para esse tipo de criação
de objetos sob demanda.
Escanear para baixar
3.Você pode criar objetos usando suas próprias funções
construtoras, ou utilizando alguns dos construtores
embutidos, como Object(), Date(), String(), e assim por
diante.
4.É melhor manter-se com a notação de literal de array.
5.É apenas uma combinação da notação de literal de array e
da notação de objeto literal.
6.Esse comportamento pode levar a resultados inesperados
quando o valor que você passa para ele é dinâmico e não
conhecido até o tempo de execução.
7.Você deve sempre se esforçar para manter o namespace
global limpo.
8.Construtores retornam implicitamente 'this', mesmo quando
você não tem uma instrução de retorno na função.
9.Porque os primitivos podem agir como objetos assim que
você precisar, muitas vezes não há razão para usar os
construtores wrapper mais verbosos.
10.Você pode ser criativo ao lidar com seus objetos de erro
personalizados e usá-los para restaurar o estado da
Escanear para baixar
aplicação de volta ao normal.
Escanear para baixar
Capítulo 4 | Frases das páginas -109
1.As funções são objetos de primeira classe; elas
podem ser passadas como valores e ampliadas com
propriedades e métodos.
2.Em JavaScript, não existe escopo local de chaves; em
outras palavras, blocos não criam escopo. Existe apenas
escopo de função.
3.O padrão de callback é um padrão simples e poderoso que
pode ser útil ao projetar uma biblioteca.
4.As funções podem ter propriedades e métodos, então
podem até mesmo armazenar resultados e gerenciar estado
com facilidade.
5.Currying é um processo de transformação; nós
transformamos uma função.
6.Funções imediatas ajudam você a envolver uma quantidade
de trabalho que deseja fazer sem deixar variáveis globais
para trás.
7.Usar objetos de configuração fornece APIs mais limpas,
especialmente se você está construindo uma biblioteca ou
Escanear para baixar
qualquer outro código que será consumido por outros
programas.
8.A memoização é uma técnica que armazena os resultados
das chamadas de funções para otimizar o desempenho.
Capítulo 5 | Frases das páginas -141
1.JavaScript não possui namespaces embutidos na
sintaxe da linguagem, mas esta é uma
funcionalidade que é bastante fácil de se alcançar.
2.Considere o seguinte exemplo: // ANTES: 5 globais //
Aviso: antipadrão
3.Este padrão é uma boa maneira de organizar seu código e
evitar colisões de nomes no seu próprio código, assim
como colisões entre seu código e o código de terceiros.
4.Quando, a seguir, a resolução do símbolo global é realizada
apenas uma vez na função. Depois disso, a variável local é
utilizada, o que é muito mais rápido.
5.Vamos ver um exemplo onde o nome é um membro
privado, não acessível fora do construtor: function Gadget()
{...};
Escanear para baixar
6.O padrão de módulo é uma maneira amplamente utilizada e
altamente recomendada de organizar seu código,
especialmente à medida que ele cresce.
7.O padrão de revelação é sobre ter métodos privados, que
você também expõe como métodos públicos.
8.Propriedades estáticas (tanto privadas quanto públicas)
podem ser bastante úteis. Elas podem conter métodos e
dados que não são específicos da instância e não são
recriados com cada instância.
9.O padrão de encadeamento permite que você chame
métodos em um objeto um após o outro sem atribuir os
valores de retorno das operações anteriores a variáveis.
Capítulo 6 | Frases das páginas -172
1.Prefira a composição de objetos à herança de
classes.
2.Você deve sempre se esforçar para escolher um padrão
moderno, a menos que a equipe esteja realmente
desconfortável se não houver classes envolvidas.
3.O objetivo da implementação da herança clássica é ter
Escanear para baixar
objetos criados por uma função construtora, Child(), que
recebem propriedades de outra construtora, Parent().
4.Na maior parte do tempo, você não quer as propriedades
próprias, pois elas provavelmente são específicas de uma
instância e não reutilizáveis.
5.Quando se trata de herança, é benéfico estudar e entender
os diferentes padrões, porque eles ajudam a melhorar sua
compreensão da linguagem.
Escanear para baixar
Capítulo 7 | Frases das páginas -217
1.Em JavaScript, não existem classes, apenas
objetos. Quando você cria um novo objeto, na
verdade, não há outro objeto igual a ele, e o novo
objeto é, por si só, um singleton.
2.A discussão a seguir não é tão útil como um padrão prático,
mas mais como um exercício teórico em imitar as soluções
para questões relacionadas aos designs de algumas
linguagens baseadas em classes (estaticamente, fortemente
tipadas) nas quais funções não são objetos de primeira
classe.
3.Funções em JavaScript são objetos, então podem ter
propriedades. Você pode ter algo como Universe.instance e
armazenar o objeto ali.
4.O padrão decorator é uma maneira flexível de adicionar
funcionalidade e ajustar um objeto em tempo de execução.
5.Ao selecionar algoritmos em tempo de execução, o padrão
strategy capacita os usuários a trabalhar com a mesma
interface, mas escolher diferentes implementações com
Escanear para baixar
base em suas necessidades ou contexto específicos.
Capítulo 8 | Frases das páginas -249
1.Manter as três preocupações o mais separadas
possível melhora a entrega da aplicação para uma
ampla variedade de agentes de usuário.
2.A camada JavaScript (o comportamento) deve ser não
intrusiva, ou seja, não deve prejudicar o usuário, não deve
tornar a página inutilizável em navegadores não suportados
e não deve ser um requisito para o funcionamento da
página.
3.Uma técnica comum para lidar elegantemente com
diferenças entre navegadores é a detecção de capacidade.
4.Usar uma boa biblioteca JavaScript, que abstrai as
diferenças entre navegadores, pode acelerar
significativamente o desenvolvimento.
5.Evitar o acesso ao DOM em loops é fundamental para
otimizar o desempenho do JavaScript.
6.A regra geral é ter menos atualizações de DOM, o que
significa agrupar mudanças e realizá-las fora da árvore de
Escanear para baixar
documento 'ativa'.
7.A delegação de eventos se beneficia do borbulhamento de
eventos e reduz o número de ouvintes de eventos anexados
a nós separados.
8.Usando setTimeout(), você pode simular threads no
navegador, dividindo uma grande quantidade de trabalho
em partes menores.
9.JSONP é outra maneira de fazer requisições remotas.
10.Combinar scripts leva a tempos de carregamento de
página significativamente mais rápidos, reduzindo
requisições HTTP.
Escanear para baixar
Padrões JavaScript Perguntas
Ver no site do Bookey
Capítulo 1 | Padrões JavaScript| Perguntas e
respostas
1.Pergunta
O que são padrões no contexto do JavaScript e por que
são importantes?
Resposta:Padrões são modelos ou soluções para
problemas comuns na programação. Eles ajudam a
decompor questões complexas em partes
gerenciáveis, permitindo que os desenvolvedores se
concentrem em aspectos únicos de uma tarefa,
ignorando detalhes repetitivos. Ao estudar e aplicar
padrões estabelecidos, os desenvolvedores podem
escrever um código melhor e mais manutenível,
melhorar a comunicação dentro das equipes e usar
um vocabulário comum para discutir técnicas de
codificação.
2.Pergunta
Quem é o público-alvo de 'Padrões JavaScript'?
Escanear para baixar
Resposta:O livro é destinado a desenvolvedores e
programadores profissionais que desejam aprimorar suas
habilidades em JavaScript. Ele não aborda tópicos para
iniciantes, como laços e condicionais, mas se concentra em
conceitos mais avançados a partir de uma perspectiva de
padrões.
3.Pergunta
Que tipos de padrões 'Padrões JavaScript' discute?
Resposta:O livro explora três tipos principais de padrões:
Padrões de design, que se originam do 'Gang of Four';
Padrões de codificação, que se concentram em práticas
específicas de JavaScript; e Antipadrões, que destacam
práticas comuns que podem criar mais problemas do que
solucioná-los.
4.Pergunta
Como o tratamento de objetos no JavaScript difere de
linguagens baseadas em classes?
Resposta:JavaScript não possui classes; em vez disso, ele
utiliza protótipos para herança e criação de objetos. Isso
Escanear para baixar
permite uma composição de objetos mais simples, sem a
sobrecarga de definir classes e cadeias de herança. Os
desenvolvedores podem criar objetos diretamente e
modificá-los sem uma estrutura de classe formal.
5.Pergunta
Quais conceitos básicos uma pessoa deve entender sobre
JavaScript para codificação eficaz, segundo o livro?
Resposta:Os conceitos-chave incluem entender que o
JavaScript é uma linguagem orientada a objetos, com funções
como objetos de primeira classe. Os desenvolvedores
também devem estar familiarizados com a natureza dos
objetos JavaScript, protótipos e como lidar com objetos
internos e definidos pelo usuário.
6.Pergunta
Qual é a importância do 'modo estrito' no ECMAScript 5
(ES5)?
Resposta:O modo estrito no ES5 simplifica o JavaScript ao
remover certos recursos que muitas vezes levam a erros. Ele
encoraja práticas de codificação mais limpas e ajuda a
Escanear para baixar
identificar problemas potenciais mais cedo, tornando o
código menos propenso a bugs.
7.Pergunta
O que é JSLint e como ele ajuda os desenvolvedores
JavaScript?
Resposta:JSLint é uma ferramenta de qualidade de código
projetada para JavaScript que ajuda os desenvolvedores a
identificar problemas potenciais em seu código. Ela incentiva
as melhores práticas e pode detectar erros que, de outra
forma, poderiam passar despercebidos até a execução. Usar
JSLint pode melhorar significativamente a confiança na
codificação e a qualidade geral do código.
8.Pergunta
Como a dependência ambiental do JavaScript afeta os
padrões de programação discutidos no livro?
Resposta:Embora o livro discuta principalmente padrões
centrais de JavaScript que são independentes do ambiente, é
importante notar que o JavaScript opera dentro de diferentes
ambientes que podem introduzir comportamentos únicos.
Escanear para baixar
Reconhecer objetos host e suas funcionalidades pode
influenciar como os padrões são aplicados em situações
práticas.
9.Pergunta
Qual o papel do objeto console na programação
JavaScript, conforme mencionado no livro?
Resposta:O objeto console serve como uma ferramenta para
os desenvolvedores output de dados, testar trechos de código
e depurar aplicações de forma não invasiva. Ele facilita o
aprendizado e a experimentação com o código JavaScript
sem interromper o fluxo da página da web.
Capítulo 2 | 2. Essenciais| Perguntas e respostas
1.Pergunta
Por que é importante escrever um código que seja fácil de
manter?
Resposta:Escrever código que é fácil de manter
reduz o custo de correção de bugs, que aumenta ao
longo do tempo. Garante que tanto os
desenvolvedores originais quanto os subsequentes
Escanear para baixar
possam entender e trabalhar facilmente com o
código, prevenindo frustrações e perda de tempo ao
revisitar projetos. Essa prática não só beneficia os
prazos do projeto, mas também aumenta a
satisfação dos desenvolvedores.
2.Pergunta
Quais são alguns padrões comuns para minimizar
variáveis globais em JavaScript?
Resposta:Para minimizar variáveis globais, sempre use 'var'
ao declarar variáveis, utilize o padrão de namespacing e
considere funções autoexecutáveis. Essas estratégias ajudam
a evitar colisões de nomes e tornam o código mais limpo e
gerenciável.
3.Pergunta
Qual é a prática recomendada para declarações de
variáveis em funções?
Resposta:O padrão de uma única declaração 'var' é
recomendado, onde todas as variáveis necessárias pela
função são declaradas no início. Isso ajuda a evitar erros
Escanear para baixar
lógicos que podem surgir devido ao hoisting e mantém o
escopo da variável claro.
4.Pergunta
Como seguir convenções de codificação pode melhorar a
qualidade do código?
Resposta:Convenções de codificação garantem consistência,
o que torna o código mais fácil de ler e entender. Quando
todos os desenvolvedores de uma equipe seguem convenções
estabelecidas, novos membros da equipe podem entender
rapidamente a estrutura do projeto, levando a uma
colaboração mais eficaz.
5.Pergunta
Que passos os desenvolvedores podem seguir para
documentar suas APIs de maneira eficaz?
Resposta:Os desenvolvedores podem escrever comentários
em formatos especiais diretamente no código e usar
ferramentas como JSDoc ou YUIDoc para gerar
automaticamente a documentação da API. Isso combina os
benefícios de criar uma documentação útil com a eficiência
Escanear para baixar
de manter o código.
6.Pergunta
Por que os desenvolvedores devem rodar o JSLint em seu
código?
Resposta:Rodar o JSLint ajuda a identificar violações das
melhores práticas e padrões discutidos no capítulo, como
usar 'var' de forma consistente, lidar corretamente com
'eval()' e garantir a legibilidade do código. Ele serve como
uma ferramenta valiosa para manter a qualidade do código.
7.Pergunta
O que deve ser evitado para prevenir colisões de nomes
em uma aplicação JavaScript?
Resposta:Para prevenir colisões de nomes, é crucial limitar o
uso de variáveis globais, garantir nomes únicos para funções
e variáveis, e escopar adequadamente as variáveis dentro das
funções. Utilizar um design modular também pode ajudar a
isolar o código e prevenir sobreposições.
8.Pergunta
Qual é a diferença entre globais implícitas e explícitas em
JavaScript?
Escanear para baixar
Resposta:Globais implícitas são variáveis que são criadas
sem declaração e se tornam automaticamente propriedades
do objeto global, enquanto globais explícitas são variáveis
globais devidamente declaradas usando 'var'. Globais
implícitas podem ser criadas inadvertidamente, levando à
poluição do escopo global.
9.Pergunta
Como armazenar o comprimento em loops pode melhorar
o desempenho?
Resposta:Ao armazenar o comprimento de um array ou
coleção no início de um loop, você evita acessar
repetidamente a propriedade de comprimento em cada
iteração, o que pode melhorar significativamente o
desempenho, especialmente para HTMLCollections.
10.Pergunta
Quais são as implicações de aumentar protótipos nativos
em JavaScript?
Resposta:Aumentar protótipos nativos pode levar a
comportamentos imprevisíveis no código, já que outros
Escanear para baixar
desenvolvedores podem não esperar por essas mudanças. Isso
também pode levar a complicações em métodos que
dependem do comportamento padrão do protótipo,
potencialmente criando dores de cabeça na manutenção.
11.Pergunta
Quais são algumas práticas eficazes para convenções de
nomenclatura em JavaScript?
Resposta:Algumas convenções de nomenclatura eficazes
incluem usar camel case para funções e variáveis (por
exemplo, 'minhaFuncao'), capitalizar construtores (por
exemplo, 'MeuConstrutor'), usar letras maiúsculas para
constantes (por exemplo, 'LARGURA_MAXIMA'), e
empregar um prefixo de sublinhado para propriedades
privadas (por exemplo, '_varPrivada'). Manter consistência
na nomenclatura torna o código mais compreensível.
Capítulo 3 | 3. Literais e Construtores| Perguntas e
respostas
1.Pergunta
O que são literais em JavaScript e por que são preferidos
em relação a construtores?
Escanear para baixar
Resposta:Literais em JavaScript são uma forma
concisa de definir objetos, arrays e expressões
regulares diretamente usando sintaxes como `{}`,
`[]`, ou `/padrão/`. Eles são preferidos em relação a
construtores como `Object()` ou `Array()` porque os
literais são mais concisos, expressivos, menos
propensos a erros e enfatizam que os objetos são
pares chave-valor mutáveis. Por exemplo, usar `var
dog = {name: 'Benji'}` é mais curto e claro do que
usar `var dog = new Object(); dog.name = 'Benji';`.
2.Pergunta
O que é JSON e como ele se relaciona com literais
JavaScript?
Resposta:JSON, ou Notação de Objetos JavaScript, é um
formato de intercâmbio de dados leve que é derivado de
literais de objetos JavaScript. Ele é utilizado para
transferência de dados e permite a representação de objetos e
arrays usando uma sintaxe semelhante à dos literais
JavaScript, onde os nomes das propriedades devem estar
Escanear para baixar
entre aspas duplas, e.g., `{`.
3.Pergunta
Como podem ser criadas funções construtoras
personalizadas em JavaScript?
Resposta:Funções construtoras personalizadas em JavaScript
são definidas como funções regulares, mas são usadas com a
palavra-chave 'new' para criar instâncias de objetos. Por
exemplo:
javascript
function Person(name) {
this.name = name;
this.say = function() {
return 'Eu sou ' + this.name;
};
}
var adam = new Person('Adam');
console.log(adam.say()); // 'Eu sou Adam'
```
Escanear para baixar
Esse padrão imita a criação de objetos baseada em classes e
permite métodos específicos de objetos.
4.Pergunta
Qual é a diferença entre literais de objetos e funções
construtoras em termos de mutabilidade?
Resposta:Literais de objetos são inerentemente mutáveis,
permitindo que propriedades e métodos sejam adicionados,
modificados ou excluídos a qualquer momento após sua
criação. Por exemplo, você pode começar com `var dog = {}`
e adicionar `dog.name = 'Benji'` depois. Funções construtoras
também podem criar instâncias mutáveis, mas elas
frequentemente exigem mais código padrão e precisam
garantir que 'new' seja usado para evitar comportamentos
inesperados.
5.Pergunta
Por que é importante garantir o uso de 'new' com funções
construtoras?
Resposta:Esquecer de usar 'new' ao chamar um construtor
pode levar a erros lógicos, já que `this` se referiria ao objeto
Escanear para baixar
global em vez de uma nova instância de objeto. Isso pode
criar propriedades no escopo global inadvertidamente. Para
prevenir isso, padrões como verificar com 'instanceof' ou
invocar o construtor automaticamente com 'new' podem
ajudar a garantir um comportamento correto.
6.Pergunta
Quais problemas podem surgir ao usar o construtor
`Array()`?
Resposta:Usar o construtor `Array()` pode levar a resultados
inesperados, especialmente ao passar um único número para
ele. Por exemplo, `new Array(3)` cria um array vazio de
comprimento 3, enquanto usar a notação de literal de array
`[]` diretamente é mais direto e previne confusões. É
recomendável sempre usar literais de array para clareza e
evitar essas armadilhas.
7.Pergunta
Quando se deve preferir objetos wrapper primitivos, e
por que não usá-los geralmente?
Resposta:Objetos wrapper primitivos como `Number()`,
Escanear para baixar
`String()`, e `Boolean()` geralmente não são necessários
porque primitivos podem se comportar como objetos por
meio de 'boxing' temporário para acesso a métodos. Isso
significa que você pode usar uma string como
`'hi'.toUpperCase()`, que funciona bem sem precisar de um
wrapper. Objetos wrapper são necessários apenas quando
você precisa especificamente aumentar um valor primitivo
com propriedades adicionais.
8.Pergunta
O que são literais de expressões regulares e por que são
preferidos em relação ao construtor `RegExp`?
Resposta:Literais de expressões regulares são criados com
uma sintaxe concisa usando barras, e.g., `/padrão/`. Eles são
preferidos em relação ao construtor `RegExp` porque os
literais são mais fáceis de ler, menos verbosos e evitam
complicações com escapes de caracteres. Por exemplo, criar
uma regex para coincidir com uma barra invertida é direto
como `var re = /\/;`, comparado a `var re = new
RegExp('\\');`.
Escanear para baixar
9.Pergunta
Qual é a importância dos construtores de erro em
JavaScript?
Resposta:Construtores de erro como `Error()`, `TypeError()`,
e outros são importantes para tratamento de exceções em
JavaScript. Eles criam objetos de erro com propriedades
como `name` e `message`, que podem ser usados para
identificar e tratar erros específicos de forma adequada.
Objetos de erro personalizados também podem ser lançados
para melhor rastreamento e gerenciamento de erros.
10.Pergunta
Como o JavaScript lida com o retorno de funções
construtoras?
Resposta:Em JavaScript, quando uma função construtora é
invocada com `new`, ela automaticamente retorna o objeto
criado referenciado por `this`, a menos que outro objeto seja
explicitamente retornado. Isso permite a flexibilidade de
retornar qualquer objeto, enquanto mantém um
comportamento consistente de retornar a instância
Escanear para baixar
recém-criada por padrão.
Escanear para baixar
Capítulo 4 | 4. Funções| Perguntas e respostas
1.Pergunta
Por que dominar as funções é crucial para
programadores JavaScript?
Resposta:Dominar funções é crucial porque o
JavaScript depende fortemente de funções para
executar diversas tarefas, tornando-as essenciais
para uma programação eficaz. As funções, sendo
objetos de primeira classe, permitem
comportamento dinâmico, encapsulamento de lógica
e APIs mais limpas.
2.Pergunta
Quais são as duas principais características das funções
em JavaScript que as distinguem das funções em outras
linguagens de programação?
Resposta:1. As funções são objetos de primeira classe, o que
significa que podem ser armazenadas em variáveis, passadas
como argumentos e retornadas de outras funções. 2. As
funções fornecem escopo, o que significa que criam um
escopo local para variáveis, ao contrário dos escopos de
Escanear para baixar
bloco encontrados em algumas outras linguagens.
3.Pergunta
Como a elevação de variáveis afeta as declarações de
funções em comparação com expressões de função em
JavaScript?
Resposta:Nas declarações de funções, tanto a existência da
função quanto seu corpo são elevados ao topo de seu escopo,
tornando-as utilizáveis antes de sua declaração real no
código. Em contrapartida, nas expressões de função, apenas a
declaração da variável é elevada, não o corpo da função,
resultando em 'undefined' se chamada antes de sua definição.
4.Pergunta
O que é o padrão de callback e como ele é benéfico na
programação JavaScript?
Resposta:O padrão de callback envolve passar funções como
argumentos para outras funções. Isso permite programação
assíncrona, onde uma função pode executar uma função de
callback uma vez que uma tarefa é concluída, levando a
estruturas de código mais responsivas e flexíveis.
5.Pergunta
Escanear para baixar
O que são objetos de configuração e como eles melhoram
a usabilidade das funções?
Resposta:Objetos de configuração consolidam múltiplos
parâmetros em um único argumento de objeto, melhorando a
usabilidade das funções ao eliminar a necessidade de lembrar
a ordem e a presença de muitos argumentos individuais,
tornando as chamadas de função mais limpas e menos
propensas a erros.
6.Pergunta
Você pode explicar o que é currying e dar um exemplo de
seu benefício?
Resposta:Currying é uma técnica de programação funcional
onde uma função com múltiplos argumentos é transformada
em uma série de funções, cada uma aceitando um único
argumento. Isso possibilita a aplicação parcial de argumentos
e pode resultar em um código mais reutilizável e conciso. Por
exemplo, currying uma função como add(a, b) pode permitir
que você crie uma nova função add5 que automaticamente
adiciona 5 a qualquer número dado.
Escanear para baixar
7.Pergunta
O que é memoização e em quais cenários ela é
particularmente útil?
Resposta:Memoização é uma técnica de otimização onde os
resultados de chamadas de funções caras são armazenados
em cache e retornados quando os mesmos insumos ocorrem
novamente. É particularmente útil em aplicações que
invocam repetidamente funções com os mesmos parâmetros,
como funções recursivas, pois pode reduzir
significativamente o tempo de computação.
8.Pergunta
Descreva o que é uma função imediata e seu caso de uso.
Como ela ajuda a proteger o escopo global?
Resposta:Uma função imediata (função auto-invocada) é
executada assim que é definida e envolve o código dentro de
seu próprio escopo local. Isso protege o escopo global da
poluição, mantendo as variáveis localizadas na função
imediata, tornando-a ideal para código de inicialização onde
variáveis globais são desnecessárias.
Escanear para baixar
9.Pergunta
Por que entender closures é importante ao trabalhar com
funções em JavaScript?
Resposta:Closures permitem que funções mantenham acesso
às variáveis definidas em seu escopo externo mesmo após
esse escopo ter terminado de executar. Isso é crucial para
criar código encapsulado, possibilitando armazenamento de
dados privados e manutenção de estado em aplicações.
10.Pergunta
O que são funções autodefinidas e quais vantagens elas
oferecem?
Resposta:Funções autodefinidas se redefinem ao serem
executadas, permitindo otimizações de recursos e
desempenho, pois podem eliminar cálculos desnecessários
após sua primeira invocação. Inicialmente, elas realizam um
trabalho de configuração e, em seguida, ajustam sua
implementação com base no que é necessário a seguir.
Capítulo 5 | 5. Padrões de Criação de Objetos|
Perguntas e respostas
1.Pergunta
Escanear para baixar
Quais são alguns dos principais padrões para criação de
objetos em JavaScript abordados neste capítulo?
Resposta:Este capítulo discute vários padrões
importantes para criação de objetos em JavaScript:
namespaces para organização e para evitar a
poluição global, o padrão de módulo para
encapsular código, padrões de privacidade para
controlar o acesso a propriedades e o padrão
sandbox, que cria ambientes isolados para a
execução de código.
2.Pergunta
Como os namespaces podem ajudar em aplicações
JavaScript?
Resposta:Os namespaces ajudam a reduzir o número de
variáveis globais e a prevenir colisões de nomes ao permitir
que os desenvolvedores agrupem código relacionado dentro
de um único objeto global. Por exemplo, em vez de ter várias
funções globais, você pode criar um objeto global (como
MYAPP) e definir todas as suas funções como propriedades
Escanear para baixar
desse objeto.
3.Pergunta
O que é um membro privado em JavaScript e como você
pode implementar um?
Resposta:Um membro privado em JavaScript é uma
propriedade ou método que não é acessível fora de uma
determinada função ou objeto. Você pode implementar um
membro privado usando um closure. Por exemplo, definindo
uma variável dentro de uma função construtora e fornecendo
métodos públicos que podem acessar essa variável, você a
protege de ser acessada diretamente de fora do construtor.
4.Pergunta
O que são métodos privilegiados?
Resposta:Métodos privilegiados são métodos públicos que
têm acesso a membros privados de um objeto. Por exemplo,
se você tem uma variável privada dentro de um construtor e
um método público definido dentro do mesmo construtor que
acessa essa variável privada, esse método é considerado
privilegiado.
Escanear para baixar
5.Pergunta
Qual é a vantagem de usar o padrão de módulo em
JavaScript?
Resposta:O padrão de módulo fornece uma maneira de
organizar e encapsular funções e propriedades relacionadas,
permitindo melhor gerenciamento do código à medida que as
aplicações crescem. Ele cria uma estrutura que ajuda os
desenvolvedores a criarem módulos autônomos com APIs
públicas claras, enquanto mantém os detalhes de
implementação interna privados.
6.Pergunta
Como o padrão sandbox melhora o padrão de
namespaces?
Resposta:O padrão sandbox permite que múltiplas instâncias
de uma aplicação ou biblioteca sejam executadas na mesma
página sem interferir umas nas outras, algo que o padrão de
namespaces geralmente não consegue alcançar. Ao
encapsular o código em um ambiente sandbox, você pode
prevenir colisões acidentais e manter o namespace global
Escanear para baixar
limpo.
7.Pergunta
Como você pode criar membros estáticos em um
construtor JavaScript?
Resposta:Em JavaScript, membros estáticos podem ser
criados adicionando propriedades diretamente à função
construtora. Por exemplo, ao definir um método como
'NomeDoConstrutor.nomeDoMétodo', você pode tornar esse
método chamável sem precisar de uma instância do
construtor.
8.Pergunta
Qual é o padrão de encadeamento em JavaScript e por
que ele é útil?
Resposta:O padrão de encadeamento permite que múltiplas
chamadas de métodos sejam encadeadas em uma única
instrução. Isso é útil porque pode tornar o código mais
conciso e legível, permitindo que operações sejam realizadas
sequencialmente de forma fluida.
9.Pergunta
Qual é a desvantagem ao usar o padrão de encadeamento
Escanear para baixar
em JavaScript?
Resposta:Embora o padrão de encadeamento possa levar a
um código mais limpo e conciso, ele pode dificultar a
depuração, uma vez que pode não ser claro qual método
específico em uma cadeia causou um erro se algo der errado.
Isso pode levar a desafios na legibilidade e na manutenção.
10.Pergunta
O que é clonagem de objetos e por que é importante ao
lidar com membros privados?
Resposta:Clonagem de objetos é o processo de criar uma
duplicata de um objeto. É importante ao lidar com membros
privados porque, se você estiver expondo um objeto ou array
privado por meio de um método privilegiado, retornar uma
referência a ele pode permitir que código externo modifique
esse conteúdo privado. Portanto, é mais seguro clonar o
objeto antes de retorná-lo.
Capítulo 6 | 6. Padrões de Reuso de Código|
Perguntas e respostas
1.Pergunta
Qual é o principal objetivo da reutilização de código na
Escanear para baixar
programação?
Resposta:O principal objetivo da reutilização de
código é escrever o menor código possível enquanto
reutiliza código existente, bom, testado, fácil de
manter, extensível e documentado.
2.Pergunta
Como a herança se relaciona com a reutilização de
código?
Resposta:A herança é um dos meios para alcançar a
reutilização de código, permitindo que uma nova classe ou
objeto herde propriedades e métodos de um já existente, mas
não é o único caminho.
3.Pergunta
Qual conselho o 'Gang of Four' fornece sobre a criação de
objetos?
Resposta:O 'Gang of Four' aconselha a 'Preferir a composição
de objetos à herança de classes', destacando que compor
objetos pode ser muitas vezes mais flexível e adequado do
que confiar apenas na herança.
Escanear para baixar
4.Pergunta
O que se refere 'herança clássica'?
Resposta:Herança clássica refere-se aos padrões de herança
que usam classes como modelos para objetos, como em
linguagens como Java, onde um objeto deve ser uma
instância de uma classe específica.
5.Pergunta
Qual é a diferença entre padrões de herança clássica e
moderna em JavaScript?
Resposta:A herança clássica assume a presença de classes e
muitas vezes se baseia em funções construtoras, enquanto os
padrões de herança modernos focam na composição de
objetos e na cadeia de protótipos sem o paradigma do
construtor de classe.
6.Pergunta
Por que os desenvolvedores devem evitar usar o termo
'classe' ao discutir herança em JavaScript?
Resposta:Os desenvolvedores devem evitar usar o termo
'classe' porque em JavaScript, pode significar coisas
diferentes para pessoas diferentes, e a linguagem opera
Escanear para baixar
fundamentalmente com protótipos em vez de estruturas
clássicas de classes.
7.Pergunta
O que é o padrão 'Rent-a-Constructor'?
Resposta:O padrão 'Rent-a-Constructor' resolve o problema
de passar argumentos de um construtor filho para um
construtor pai, emprestando o construtor pai e aplicando-o no
contexto do construtor filho.
8.Pergunta
O que é herança prototípica?
Resposta:A herança prototípica é um padrão moderno em
JavaScript onde objetos herdam diretamente de outros
objetos, permitindo uma criação de objetos mais flexível e
reutilização sem a necessidade de estruturas baseadas em
classes.
9.Pergunta
Como a função 'extend()' funciona no contexto da
herança por cópia de propriedades?
Resposta:A função 'extend()' cria uma cópia rasa das
propriedades de um objeto pai para um objeto filho,
Escanear para baixar
permitindo que o filho herde funcionalidade sem estabelecer
uma relação formal de herança.
10.Pergunta
Você pode descrever o padrão 'mix-in'?
Resposta:O padrão 'mix-in' permite a mesclagem de
propriedades de vários objetos fontes em um objeto alvo,
criando efetivamente um novo objeto que combina
funcionalidades de vários pais sem estabelecer uma cadeia de
herança.
11.Pergunta
Qual é o propósito do método 'bind()' em JavaScript?
Resposta:O método 'bind()' em JavaScript é usado para criar
uma nova função que, quando chamada, tem sua
palavra-chave 'this' definida para o valor fornecido,
permitindo o compartilhamento de métodos enquanto
mantém o contexto correto.
12.Pergunta
Quais são algumas desvantagens dos padrões de herança
clássica?
Resposta:Desvantagens incluem complexidade desnecessária,
Escanear para baixar
potencial para problemas de desempenho devido a várias
chamadas de construtores e o risco de modificar propriedades
de protótipo compartilhadas, o que pode levar a efeitos
colaterais indesejados.
13.Pergunta
Como o ECMAScript 5 impactou a herança prototípica?
Resposta:O ECMAScript 5 introduziu o método
Object.create(), que permite uma herança prototípica mais
fácil e oficial, criando um novo objeto com um protótipo
especificado.
14.Pergunta
Qual consideração chave os desenvolvedores devem ter
em mente sobre a reutilização de código?
Resposta:Os desenvolvedores devem ter em mente que,
embora a herança seja uma maneira de alcançar a reutilização
de código, técnicas mais simples, como emprestar métodos,
vincular, copiar propriedades e misturar funcionalidades,
costumam ser mais eficazes.
Escanear para baixar
Capítulo 7 | 7. Padrões de Design| Perguntas e
respostas
1.Pergunta
O que é o padrão Singleton e como ele se aplica ao
JavaScript?
Resposta:O padrão Singleton garante que uma
classe tenha apenas uma instância e fornece um
ponto de acesso global a ela. No JavaScript, como
não existem classes no sentido tradicional, todo
objeto criado usando um literal de objeto é, por
natureza, um singleton. Por exemplo, quando você
cria um objeto usando `var obj = { myprop: 'meu
valor' };`, `obj` já é um singleton. Mesmo que você
crie outro objeto com propriedades semelhantes
como `var obj2 = { myprop: 'meu valor' };`, `obj` e
`obj2` não serão a mesma instância porque ocupam
localizações de memória diferentes.
2.Pergunta
O que é o padrão Factory e como ele é implementado em
JavaScript?
Escanear para baixar
Resposta:O padrão Factory é utilizado para criar objetos sem
especificar a classe exata do objeto que será criado. No
JavaScript, isso pode ser implementado utilizando uma
função construtora que inclui um método estático para criar
instâncias com base em um tipo dado. Por exemplo, um
construtor `CarMaker` pode ter um método estático
`factory()` que cria diferentes tipos de objetos de carro com
base em uma entrada de string, como 'Compacto' ou 'SUV',
permitindo que os clientes criem objetos de carro sem
conhecer os tipos específicos com antecedência.
3.Pergunta
Você pode explicar o propósito do padrão Observer?
Resposta:O padrão Observer permite que objetos se
comuniquem entre si sem acoplamento rígido em suas
implementações. Neste padrão, um objeto (o publicador)
mantém uma lista de observadores que estão interessados em
certos eventos. Quando um evento ocorre, o publicador
notifica todos os observadores registrados, permitindo que
eles reajam de acordo. Isso promove um acoplamento solto e
Escanear para baixar
torna o sistema mais flexível.
4.Pergunta
Quais são as vantagens de usar o padrão Proxy no
JavaScript?
Resposta:O padrão Proxy fornece uma interface para outro
objeto, controlando o acesso a ele. Pode ser utilizado para
inicialização preguiçosa, onde um objeto é criado apenas
quando necessário, economizando recursos. Proxies também
podem combinar múltiplas operações em uma única
operação, reduzindo o número de chamadas feitas ao
interagir com recursos caros, como requisições de rede,
tornando as aplicações mais eficientes.
5.Pergunta
Como o padrão Mediator melhora a comunicação entre
objetos em um sistema?
Resposta:O padrão Mediator centraliza a comunicação entre
objetos, reduzindo dependências diretas entre eles. Em vez de
os objetos chamarem os métodos uns dos outros diretamente,
eles se comunicam através de um objeto mediador, que
Escanear para baixar
gerencia a coordenação. Essa abordagem reduz o
acoplamento rígido, simplifica a manutenção e torna mais
fácil modificar comportamentos ou adicionar novos objetos
sem afetar o sistema como um todo.
6.Pergunta
O que é o padrão Decorator e como ele alcança a
melhoria de funcionalidade?
Resposta:O padrão Decorator permite que comportamento
seja adicionado a objetos individuais, seja estaticamente ou
dinamicamente, sem afetar o comportamento de outros
objetos da mesma classe. No JavaScript, isso pode ser
implementado envolvimento um objeto dentro de outro
objeto que estende sua funcionalidade, permitindo
efetivamente a personalização do comportamento do objeto
em tempo de execução.
7.Pergunta
Qual é a importância de entender padrões de design no
desenvolvimento JavaScript?
Resposta:Compreender padrões de design é crucial no
Escanear para baixar
desenvolvimento JavaScript, pois eles fornecem soluções
comprovadas para problemas comuns de programação. Eles
incentivam melhores práticas, melhoram a organização do
código, aumentam a manutenibilidade e promovem código
reutilizável. Familiaridade com esses padrões permite que os
desenvolvedores escrevam códigos mais eficientes e
escaláveis, resultando em uma melhor arquitetura de
software.
Capítulo 8 | 8. Padrões DOM e de Navegador|
Perguntas e respostas
1.Pergunta
Qual é o foco principal do Capítulo 8: Padrões do DOM e
do Navegador?
Resposta:Este capítulo enfoca principalmente
padrões específicos de navegador para o uso do
JavaScript, abordando várias preocupações
relacionadas à scriptagem do lado do cliente,
manipulação do DOM, tratamento de eventos e
estratégias de implantação.
2.Pergunta
Escanear para baixar
Quais são as três principais preocupações no
desenvolvimento de aplicações web discutidas neste
capítulo?
Resposta:As três principais preocupações são Conteúdo (o
documento HTML), Apresentação (os estilos CSS) e
Comportamento (o JavaScript que trata das interações do
usuário).
3.Pergunta
Por que a separação de preocupações é importante no
desenvolvimento web?
Resposta:Separar preocupações ajuda a manter a usabilidade
entre diferentes agentes de usuário, melhora a eficiência do
desenvolvimento, facilita a resolução de problemas e
promove a melhoria progressiva para os usuários com base
nas capacidades de seus navegadores.
4.Pergunta
O que é detecção de capacidade e por que é preferida em
relação à detecção de agente de usuário?
Resposta:A detecção de capacidade verifica se um método ou
propriedade existe no ambiente atual, tornando-se uma
Escanear para baixar
abordagem mais confiável e à prova de futuro em
comparação com a detecção de agente de usuário, que é
considerada um antipadrão.
5.Pergunta
Explique a importância de reduzir o acesso ao DOM no
desempenho do JavaScript.
Resposta:O acesso ao DOM pode ser um gargalo de
desempenho; portanto, é crucial minimizá-lo evitando
acessos em loops, armazenando referências ao DOM e
usando seletores eficientes para melhorar o desempenho.
6.Pergunta
Como a manipulação do DOM pode ser otimizada para
reduzir reflows e repaints no navegador?
Resposta:Agrupe as atualizações do DOM criando alterações
em um fragmento de documento primeiro e, em seguida,
anexe-o ao DOM ativo de uma só vez, o que minimiza
operações de repaint e reflow onerosas.
7.Pergunta
O que é delegação de eventos e como isso beneficia o
desempenho no JavaScript?
Escanear para baixar
Resposta:A delegação de eventos usa um único listener de
eventos em um elemento pai para lidar com todos os eventos
de elementos filhos, reduzindo o número de listeners e
melhorando o desempenho e a clareza do código.
8.Pergunta
Descreva como lidar com scripts de longa duração em
JavaScript para evitar falta de responsividade no
navegador.
Resposta:Scripts de longa duração devem ser divididos em
tarefas menores usando setTimeout para permitir que o
navegador permaneça responsivo, ou utilizar workers da web
para cálculos pesados em segundo plano.
9.Pergunta
O que são JSONP e suas vantagens em relação ao
XMLHttpRequest tradicional?
Resposta:JSONP permite requisições entre domínios
envolvendo dados em uma chamada de função, contornando
a política de mesma origem, tornando-o útil para acessar
dados de APIs de terceiros.
10.Pergunta
Escanear para baixar
Quais estratégias podem ser usadas para otimizar o
desempenho de carregamento do JavaScript para
produção?
Resposta:As estratégias incluem combinar scripts para
minimizar requisições HTTP, minificar e comprimir arquivos
para reduzir o tamanho, configurar cache usando cabeçalhos
Expires, e utilizar CDNs para entrega mais rápida.
11.Pergunta
Qual é a importância de usar o elemento script na
otimização dos tempos de carregamento da página?
Resposta:A colocação e os atributos do elemento <script>
podem afetar significativamente o desempenho de
carregamento; os scripts devem ser colocados no final do
documento e usar atributos como defer ou async para evitar
bloquear a renderização da página.
Escanear para baixar
Padrões JavaScript Quiz e teste
Ver a resposta correta no site do Bookey
Capítulo 1 | Padrões JavaScript| Quiz e teste
1.Padrões são úteis apenas para depuração e não
têm outros benefícios para os desenvolvedores.
2.O livro é direcionado especificamente a desenvolvedores
profissionais que já estão familiarizados com conceitos
básicos de programação.
3.JavaScript depende de classes tradicionais para sua
estrutura orientada a objetos.
Capítulo 2 | 2. Essenciais| Quiz e teste
1.Código mantível deve ser legível, consistente,
previsível e bem documentado.
2.Usar `eval()` é encorajado porque aumenta a flexibilidade
do código.
3.Revisões de código entre colegas podem ajudar a melhorar
a qualidade do código e compartilhar conhecimento dentro
de uma equipe.
Capítulo 3 | 3. Literais e Construtores| Quiz e teste
Escanear para baixar
1.Literals de objeto em JavaScript são
recomendados em vez de funções construtoras
para a criação de objetos.
2.JSON usa a mesma sintaxe que os literais de objeto
JavaScript, permitindo que tanto os nomes das
propriedades quanto os valores fiquem sem aspas.
3.JavaScript permite a adição dinâmica de propriedades e
métodos a literais de objeto após sua criação.
Escanear para baixar
Capítulo 4 | 4. Funções| Quiz e teste
1.As funções JavaScript são objetos de primeira
classe, o que significa que podem ser atribuídas a
variáveis e passadas como argumentos.
2.Expressões de função podem ser erguidas (hoisted) da
mesma forma que declarações de função, permitindo seu
uso antes de serem definidas no código.
3.Currying transforma uma função que aceita múltiplos
argumentos em uma função que aceita um único argumento
por vez.
Capítulo 5 | 5. Padrões de Criação de Objetos| Quiz
e teste
1.JavaScript possui uma sintaxe embutida para
criar namespaces.
2.Métodos estáticos em JavaScript podem ser implementados
usando funções construtoras.
3.JavaScript permite propriedades privadas através de
recursos embutidos da linguagem sem a necessidade de
closures.
Escanear para baixar
Capítulo 6 | 6. Padrões de Reuso de Código| Quiz e
teste
1.O JavaScript emprega principalmente herança
clássica, semelhante a linguagens com classes.
2.No 'Padrão Padrão' da herança clássica, um construtor filho
herda propriedades diretamente em vez de através da cadeia
de protótipos.
3.Mix-ins permitem que múltiplos objetos compartilhem
propriedades e criem um novo objeto que encapsula essas
propriedades.
Escanear para baixar
Capítulo 7 | 7. Padrões de Design| Quiz e teste
1.O padrão Singleton permite que múltiplas
instâncias de uma classe sejam criadas em
JavaScript.
2.O padrão Factory é usado para criar objetos sem especificar
o tipo exato da classe em JavaScript.
3.O padrão Observer cria dependências estreitas entre
editores e assinantes para melhorar a comunicação.
Capítulo 8 | 8. Padrões DOM e de Navegador| Quiz e
teste
1.A separação de preocupações no desenvolvimento
web enfatiza a importância de manter o conteúdo,
a apresentação e o comportamento distintos para
melhorar a usabilidade em diferentes agentes de
usuário.
2.Usar manipuladores de eventos inline é recomendado para
aderir ao princípio da separação de preocupações no
manuseio de eventos JavaScript.
3.Scripts que rodam por muito tempo podem causar falta de
Escanear para baixar
resposta em navegadores, e estratégias como usar
setTimeout() podem ajudar a manter a interatividade da UI.
Escanear para baixar