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]