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]