-
Agora que já sabe o básico de JavaScript,
quero ensinar um uso interessante dele.
-
Algo que chamamos de
"programação orientada a objetos"
-
Mas primeiro precisamos
entender porque isso é útil.
-
Pensei em um programa que faça sentido
o uso da Orientação a Objetos.
-
Agora, é bom um programa para se começar.
-
No topo tenho duas variáveis que
armazenam dados de um objeto.
-
Agora, o objeto literal é um
tipo de objeto que já vimos,
-
que criamos com duas chaves
-
e colocamos todos os nomes e valores
dessas propriedades dentro.
-
Então temos duas dessas variáveis objetos,
e embaixo temos essa função drawWinston
-
que recebe um único argumento,
-
e então desenha uma imagem baseada
nas propriedades x e y dos objetos.
-
e um título de acordo com as
propriedades apelido e idade do objeto.
-
E agora embaixo finalmente, chamamos
drawWinston() no adolescente e no adulto,
-
e isso é o que faz isso aparecer.
-
Agora, se vamos aqui, e olharmos para
esses objetos, veja que eles são parecidos
-
Ambos tem as mesmas propriedades,
-
e ambos podem ser usados para
chamar a função "drawWinston()."
-
Na verdade, se você para pra pensar,
-
ambos estão descrevendo
um tipo Winston, certo?
-
E podemos imaginar que talvez exista
esse tipo abstrato de Winston no mundo.
-
e todo Winston tem os
mesmos tipos de propriedades,
-
como apelido, idade, x e y.
-
E aqui o que fizemos foi criar
duas instâncias de Winston
-
para descrever um tipo único de Winston,
-
um é Winston adolescente e este um adulto.
-
Eles são realmente bem parecidos, e sabe,
há muitas coisas similares entre eles.
-
Se você pensar nisso, há muito do modo
como o mundo funciona também
-
por isso temos esses tipos de objetos
abstratos como humanos e pessoas.
-
e então somos apenas
instâncias específicas
-
de objetos com nossas pequenas
propriedades próprias.
-
Podemos usar técnicas
de orientação a objeto em JavaScript
-
para essas variáveis do Winston
-
são instâncias formais do objeto Winston,
-
eles sabem que eles
compartilham essas propriedades.
-
Pra isso, a primeira coisa que fazemos
é descrever este tipo abstrato de Winston.
-
E faremos isso com uma variável
-
Você armazenará o tipo em uma variável.
-
Então var Winston, usaremos W, pois sempre
iniciamos nosso objetos com maiúsculo
-
e vamos configurá-lo como uma função.
-
E essa função é um tipo especial que
chamamos de "construtor da função"
-
pois é isso o que será executado toda vez
que criarmos uma nova instância do Winston
-
Se quisermos criar um Winston adolescente
ou adulto, chamaremos essa função.
-
Significa que essa função deverá receber
qualquer argumento que precise saber,
-
afim de criar um Winston completo.
-
Nesse caso, precisa saber
o apelido, idade, x e y.
-
Agora, uma vez que recebemos esses
argumentos precisamos fazer algo com eles,
-
Precisamos na verdade associar
a informação ao objeto Winston.
-
Usaremos uma nova
palavra chave, chamada this.
-
E this se refere a
instância atual do objeto.
-
Então, this.nickname, a propriedade
nickname do objeto é igual a
-
o que for passado para
o construtor da função, ok?
-
E this.age é igual idade que é
passada, this.x é igual ao x e this.y
-
igual ao y da entrada.
-
Muito bem, agora temos este
tipo abstrato chamado Winston,
-
e tem o construtor da função que
usamos para criar o novo Winston.
-
Vamos tentar usá-lo.
-
Criaremos o Winston adolescente novamente
-
mas dessa vez
faremos winstonTeen, igual,
-
e ao invés de chaves,
usaremos igual newWinston.
-
Estamos dizendo "Queremos criar
uma nova instância do tipo Winston"
-
e então passaremos a informação
necessária, "Winsteen", 15, 20, 50.
-
E então podemos deletar esse antigo,
porque não precisamos mais.
-
E agora está criado o novo Winsteen.
-
E agora podemos fazer
winstonAdult = new Winston()
-
e é claro o nome dele é
"Mr. Winst-a-lot", bom nome,
-
e ele tem 30 anos, e a posição é 229 e 50.
-
Tudo bem? E então
podemos deletar esse objeto.
-
E, nosso código ainda funciona.
-
O que fizemos aqui foi o que
eu disse certo,
-
há esse, e esse tipo de dado
abstrato que são um Winston
-
e podemos criar novas instâncias que tem
essas propriedades deles que são únicas.
-
E apenas lembraremos
das propriedades dentro deles
-
Lembrar é muito importante. Você sabe que
aqui dentro temos this.nickname, this.age.
-
Se acidentalmente, não tiver essa idade,
perceba que agora diz, "undifined"
-
É porque lá embaixo,
essa função drawWinston,
-
aguarda todos os objetos serem
informados, inclusive "age" (idade).
-
E se não colocarmos this.age,
-
Não terá uma propriedade "age", certo?
Passamos para o construtor da função
-
Mas não fizemos nada com isso,
-
temos que incluir isto no objeto
usando a palavra chave this
-
Vamos adicionar novamente.
-
Agora,você deve estar pensando,
-
Ok, você tem o um código que funciona
e está fazendo essas mudanças.
-
Mas, sabe, o que
fizemos já foi feito antes.
-
Mas aqui está a parte legal.
-
Agora, todo o nosso Winston
usa o mesmo construtor.
-
Se quisermos, podemos
mudar propriedades do Winston.
-
Todos os Winstons, aqui dentro.
-
Talvez "age" (idade), talvez
queiramos mudar para "years old" (anos).
-
Podemos mudar apenas aqui,
-
e agora em todos os nossos Winstons ficará
"15 years old", "30 years old", certo?
-
Eles estão pegando a parte que
é única deles
-
mas também está usando coisas que são
compartilhadas entre eles.
-
Isso é a parte legal da programação
orientada a objeto
-
essa ideia que há esses
tipos de objetos no mundo,
-
e você pode criar novas
instâncias desses objetos.
-
Há coisas que são parecidas neles, como a
mesma propriedade,
-
e há coisas que são diferentes como,
-
essa propriedade na verdade tem um valor
diferente dessa outra propriedade, certo?
-
Então, podemos ter o mesmo comportamento,
como chamar as mesmas funções.
-
e então usá-las de modo parecido.
-
Essa é uma das coisas legais em
programação orientada a objeto.
-
mas como você verá, há mais coisas.
-
Então, fique ligado!
-
Legendado por [Valter Bigeli]
Revisado por [Fernando dos Reis]