SlideShare uma empresa Scribd logo
JavaScript
prototipação, closure e encapsulamento
@sr_valeriano


• Desenvolvedor e Instrutor na Caelum
• ricardo.valeriano@caelum.com.br
JavaScript: prototipação, closure e encapsulamento
(oh yes, I wen’t there)
Object
> mafagafo = new Object()
> typeof(mafagafo)
  “object”

> pessoa = { }
> typeof(pessoa)
  ”object”
Properties
> supimpa = { }
> supimpa[‘agora-sim’] = ‘ (: ’

> supimpa.awesome = ‘YaY!’

> supimpa.tudo-batuta = ‘oples’
  x ReferenceError
Functions
> coisinha = function() {}
> typeof(coisinha)
  “function”

> coisinha[‘sera?’] = ‘¬¬’
> coisinha[‘sera?’]
  ‘¬¬’
Functions são Objects
> meChama = function(what) {
  console.log(what);
  console.log(typeof(this));
}

> meChama(“lágrimaAAs”)
  lágrimaAAs
  “object”

> meChama.apply(nil, [“lágrimaAAs”])
  lágrimaAAs
  “object”
JavaScript: prototipação, closure e encapsulamento
Prototype
> Object.prototype
   Object
> go = {}
> go.say
   undefined
> Object.prototype.say = function() {
   console.log(‘no, and no, and no’);
}
> go.say
   function() { ... }
> go.say()
   no, and no, and no

> go.toString()
classe?????

> mafagafo = new Object()
> typeof(mafagafo)
  “object”

> typeof(Object)
  “function”
Object Prototype

> Object.prototype.say = function() {
   console.log(‘no, and no, and no’);
}
Herança
> Construtor = function() { };

> parent = {id:’2’};
> Construtor.prototype = parent;

> child = new Construtor();
> console.log(child.id)
 2
Escopo
> mundo = {eh: ‘global’}
> pessoa = {
     miolos:function() {
       var pensa = function() {
         console.log(‘o mundo é:’+ mundo.eh);
       }
       pensa();
     }
}
> pessoa.miolos()
   “o mundo é global”

> pensa
   undefined
Escopo
> pessoa = {
     miolos:function() {
        var pensa = function() {
          console.log(‘Estou escondida!’);
        }
        pensa();
     }
}
> pessoa.miolos()
  Estou Escondida!

> pensa
   undefined
Referências
Referência
> cabeca = (function() {
      var ideias = {uma:‘social network’};
      return {
        getIdeias:function() {
          return ideias;
        }
      }
})();
> ideias
      undefined
> cabeca.getIdeias()
      {uma:‘social network’}
> cabeca.getIdeias().outra = ‘javascript’
> cabeca.getIdeias()
      {uma:‘social network’, outra:‘javascript’}
Referência
> cabeca = (function() {
      var ideias = {uma:‘social network’};
      return {
        getIdeias:function() {
          return ideias;
        }
      }
})();
> ideias
      undefined
> cabeca.getIdeias()
      {uma:‘social network’}
> cabeca.getIdeias().outra = ‘javascript’
> cabeca.getIdeias()
      {uma:‘social network’, outra:‘javascript’}
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamento
Closure
> contexto = function() {
  var bijeto = { go: ‘go’ }
  var elefante = function() {
    console.log(bijeto[“go”]);
  }
  elefante();
}
> console.log( contexto() )
  go
Encapsulamento
> cabeca = function() {
   var ideias = {uma:‘social network’};
   return {
     getIdeias:function() {
       return Object.create(ideias);
     }
   }
};

> cabeca.getIdeias()
   {uma:‘social network’}
> cabeca.getIdeias().outra = ‘javascript’
> cabeca.getIdeias()
   {uma:‘social network’}
É isso! Obrigadasso.
      @sr_valeriano

ricardo.valeriano@caelum.com.br

Mais conteúdo relacionado

PPTX
jQuery - Visão Geral
PPTX
Introdução ao MongoDB
KEY
PDF
Minicurso de jQuery
PDF
Jquery 2
PPT
Manipulando Bancos de Dados com JDBC
PDF
jQuery na Prática!
PDF
JavaScript ninja com jQuery
jQuery - Visão Geral
Introdução ao MongoDB
Minicurso de jQuery
Jquery 2
Manipulando Bancos de Dados com JDBC
jQuery na Prática!
JavaScript ninja com jQuery

Mais procurados (20)

PDF
Ecommerce, mais simples do que parece
PPT
JQuery para Iniciantes
ODP
Dinamizando Sites Estáticos
PDF
JQuery - JS 101
PDF
Programação Web com jQuery
PDF
Hash Endereçamento Quadrático Operações
PDF
Começando com ruby
PDF
Do REST ao GraphQL com PHP
PDF
Acesso a banco de dados com JDBC
PDF
PHP Community Summit - Do REST ao GraphQL com PHP
PDF
JavaScript - Introdução com Orientação a Objetos
PDF
Programação Web com jQuery
PDF
SQLAlchemy e Plone: no more zsql methods
PDF
PHP e Mysql - DELETE
PDF
Escrevendo plugins JQuery
PPT
CSS & JQquery
ODP
Segunda Apresentação jQuery
PPTX
Javascript para CSharpers - Append B - jQuery
ODP
ODP
Introdução a jQuery
Ecommerce, mais simples do que parece
JQuery para Iniciantes
Dinamizando Sites Estáticos
JQuery - JS 101
Programação Web com jQuery
Hash Endereçamento Quadrático Operações
Começando com ruby
Do REST ao GraphQL com PHP
Acesso a banco de dados com JDBC
PHP Community Summit - Do REST ao GraphQL com PHP
JavaScript - Introdução com Orientação a Objetos
Programação Web com jQuery
SQLAlchemy e Plone: no more zsql methods
PHP e Mysql - DELETE
Escrevendo plugins JQuery
CSS & JQquery
Segunda Apresentação jQuery
Javascript para CSharpers - Append B - jQuery
Introdução a jQuery
Anúncio

Semelhante a JavaScript: prototipação, closure e encapsulamento (20)

PDF
As novidades do PHP5 (2005)
KEY
Javascript - Princípios da linguagem e utilização de frameworks
PDF
Introdução ao JQuery e AJAX
PDF
LPII_Aula_7-JQuery.pdf
PDF
Evento Front End SP - Organizando o Javascript
KEY
JQuery Alagoinhas Dev Day - UNEB
PPT
J query javascript para seres humanos
PDF
O que você NÃO aprendeu sobre Programação Orientada a Objetos
KEY
NoSQL e MongoDB
PDF
Java script aula 07 - j-query
PPTX
Javascript avançado
PDF
Aula actionscript basico
PDF
Backbone.js + Rails - Front-end e back-end conectados
PDF
Evolução e futuro do uso de paradigmas no JavaScript
KEY
NoSQL e MongoDB - ETEC
PPTX
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
PDF
O que é que o Java não tem?
PDF
Java script aula 09 - JQuery
PDF
Rafael Garcia - Yii Framework, principais características e em ação
ODP
Prog web 06-php-oo
As novidades do PHP5 (2005)
Javascript - Princípios da linguagem e utilização de frameworks
Introdução ao JQuery e AJAX
LPII_Aula_7-JQuery.pdf
Evento Front End SP - Organizando o Javascript
JQuery Alagoinhas Dev Day - UNEB
J query javascript para seres humanos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
NoSQL e MongoDB
Java script aula 07 - j-query
Javascript avançado
Aula actionscript basico
Backbone.js + Rails - Front-end e back-end conectados
Evolução e futuro do uso de paradigmas no JavaScript
NoSQL e MongoDB - ETEC
JAVASCRIT – Welcome the web world Arquivo: java-script-basico-unipac-extra-v0...
O que é que o Java não tem?
Java script aula 09 - JQuery
Rafael Garcia - Yii Framework, principais características e em ação
Prog web 06-php-oo
Anúncio

Mais de Ricardo Valeriano (7)

KEY
Sua primeira app iOS
KEY
A linguagem maislegaldomundo
KEY
A ferramenta ideal: uma questão de perspectiva.
KEY
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
KEY
A primeira app iOS (a gente não esquece)
KEY
Testes Automatizados e o iOS
ZIP
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sua primeira app iOS
A linguagem maislegaldomundo
A ferramenta ideal: uma questão de perspectiva.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
A primeira app iOS (a gente não esquece)
Testes Automatizados e o iOS
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)

Último (19)

PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
COBITxITIL-Entenda as diferença em uso governança TI
Aula04-Academia Heri- Tecnologia Geral 2025
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Apple Pippin Uma breve introdução. - David Glotz
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula 18 - Manipulacao De Arquivos python
Custos e liquidação no SAP Transportation Management, TM130 Col18
Processos na gestão de transportes, TM100 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14

JavaScript: prototipação, closure e encapsulamento

  • 2. @sr_valeriano • Desenvolvedor e Instrutor na Caelum • ricardo.valeriano@caelum.com.br
  • 4. (oh yes, I wen’t there)
  • 5. Object > mafagafo = new Object() > typeof(mafagafo) “object” > pessoa = { } > typeof(pessoa) ”object”
  • 6. Properties > supimpa = { } > supimpa[‘agora-sim’] = ‘ (: ’ > supimpa.awesome = ‘YaY!’ > supimpa.tudo-batuta = ‘oples’ x ReferenceError
  • 7. Functions > coisinha = function() {} > typeof(coisinha) “function” > coisinha[‘sera?’] = ‘¬¬’ > coisinha[‘sera?’] ‘¬¬’
  • 8. Functions são Objects > meChama = function(what) { console.log(what); console.log(typeof(this)); } > meChama(“lágrimaAAs”) lágrimaAAs “object” > meChama.apply(nil, [“lágrimaAAs”]) lágrimaAAs “object”
  • 10. Prototype > Object.prototype Object > go = {} > go.say undefined > Object.prototype.say = function() { console.log(‘no, and no, and no’); } > go.say function() { ... } > go.say() no, and no, and no > go.toString()
  • 11. classe????? > mafagafo = new Object() > typeof(mafagafo) “object” > typeof(Object) “function”
  • 12. Object Prototype > Object.prototype.say = function() { console.log(‘no, and no, and no’); }
  • 13. Herança > Construtor = function() { }; > parent = {id:’2’}; > Construtor.prototype = parent; > child = new Construtor(); > console.log(child.id) 2
  • 14. Escopo > mundo = {eh: ‘global’} > pessoa = { miolos:function() { var pensa = function() { console.log(‘o mundo é:’+ mundo.eh); } pensa(); } } > pessoa.miolos() “o mundo é global” > pensa undefined
  • 15. Escopo > pessoa = { miolos:function() { var pensa = function() { console.log(‘Estou escondida!’); } pensa(); } } > pessoa.miolos() Estou Escondida! > pensa undefined
  • 17. Referência > cabeca = (function() { var ideias = {uma:‘social network’}; return { getIdeias:function() { return ideias; } } })(); > ideias undefined > cabeca.getIdeias() {uma:‘social network’} > cabeca.getIdeias().outra = ‘javascript’ > cabeca.getIdeias() {uma:‘social network’, outra:‘javascript’}
  • 18. Referência > cabeca = (function() { var ideias = {uma:‘social network’}; return { getIdeias:function() { return ideias; } } })(); > ideias undefined > cabeca.getIdeias() {uma:‘social network’} > cabeca.getIdeias().outra = ‘javascript’ > cabeca.getIdeias() {uma:‘social network’, outra:‘javascript’}
  • 21. Closure > contexto = function() { var bijeto = { go: ‘go’ } var elefante = function() { console.log(bijeto[“go”]); } elefante(); } > console.log( contexto() ) go
  • 22. Encapsulamento > cabeca = function() { var ideias = {uma:‘social network’}; return { getIdeias:function() { return Object.create(ideias); } } }; > cabeca.getIdeias() {uma:‘social network’} > cabeca.getIdeias().outra = ‘javascript’ > cabeca.getIdeias() {uma:‘social network’}
  • 23. É isso! Obrigadasso. @sr_valeriano ricardo.valeriano@caelum.com.br

Notas do Editor

  • #2: \n
  • #3: \n
  • #4: A mais mal compreendida das linguagens, malditos form validations.\nTem mais boas partes do que parece.\n
  • #5: A mais mal compreendida das linguagens, malditos form validations.\nTem mais boas partes do que parece.\n
  • #6: É muito simples criar um objeto em javascript (object literal)\n
  • #7: Um objeto pode ter propriedades, dot-notation funciona sob certas condições...\n
  • #8: Funções são, na verdade, objetos.\nObjetos podem ter propriedades, que podem ser funções.\nPodem ser invocadas via sintaxe especial...\n
  • #9: guardo em variáveis e invoco com o método apply.\n
  • #10: JavaScript tem mecanismo de herança SIM, várias formas de implementar isso, uma delas é via prototipagem\n
  • #11: Podemos adicionar propriedades dinamicamente a um objeto, mesmo que ele já exista.\n
  • #12: Não existem classes em javascript, Object na verdade é uma função\n
  • #13: Alteramos o prototype de Object, que na verdade é uma função...\n\nE todo objeto tem referência oculta a esse prototype, por isso agora todo objeto tem a função say.\n
  • #14: Por isso é possível fazer alterando o prototype de uma função e construindo objetos dela.\n
  • #15: Toda variável criada fora de uma função (ou sem a palavra var) é global.\n
  • #16: só dentro da função miolos é possível acessar a função pensa.\nescopo de função\n
  • #17: Todo objeto javascript é passado via referência, sem cópias quando passado como param.\n
  • #18: Se alterarmos um objeto que foi retornado, ainda que ele esteja escondido pelo escopo de função, vamos alterar a referência.\n
  • #19: Podemos nos aproveitar da memória...\nUma função se lembra o contexto onde foi criada. CLOSURE.\n
  • #20: o objeto elefante se lembra do objeto bijeto\n
  • #21: Agora tem outras questões (tá criando muito objetos). Mas funfa =)\n
  • #22: \n