No último vídeo, nós aprendemos
como fazer um tipo de objeto
para representar nossos dois
objetos do tipo Winston
e então os inicializamos
com os construtores.
Um tipo de objeto não deve apenas
ser associado com propriedades.
Também pode ser associado
com funcionalidades.
Pense no mundo e em todos os tipos
objetos que ele contem, como nós, humanos.
Todos nós possuímos alturas e idades,
mas também possuímos
coisas que podemos fazer,
como dormir, comer e programar.
E nós queremos poder associar
essas funções com os tipos de objeto.
Neste programa, que é o mesmo
que deixamos de lado na última vez,
nós temos uma função aqui,
drawWinston, que podemos chamar
nos dois objetos Winston.
Não ficaria melhor se pudéssemos
anexar isso ao tipo de objeto Winston?
Bem, nós podemos, e é fácil de se fazer.
Então, embaixo do nosso construtor,
escreveremos Winston, com W
maiúsculo, ponto prototype,
e o prototype, essa é uma palavra nova
a qual provavelmente você
ainda não tinha visto antes.
E o prototype é uma propriedade de
objeto que podemos anexar funções.
E isso irá significar que todo o objeto,
que seja um instância desse,
terá essas funções nele.
Então nós podemos dizer
ponto prototype e então ponto,
e depois o nome da função,
então escrevemos draw,
igual, e então pegamos nosso
código drawWinston
e podemos colocá-lo aqui
dentro. Tudo bem,
então o que fizemos foi
anexar uma função draw
ao nosso protótipo de Winston.
E isso significa que poderemos
chamar draw()
em qualquer objeto do tipo Winston.
Muito bem, então poderemos chamar
draw() em winstonTeen ou winstonAdult.
E quando temos um função desse tipo,
que podemos chamar um objeto,
nós chamamos de "método", então você
pode me escutar falar "método" agora.
Então vamos dizer que isso é
"um método de desenhar". Okay.
Então agora nós iremos
deletar isso, e isso,
e agora veremos se
podemos chamar draw().
winstonTeen.draw()
Okay. Temos um erro,
nós tivemos esse erro aqui,
então ele diz:
"winstObject não está definido"
Okay. Então antes, nós estávamos passando
esse argumento dentro de drawnWinston,
o qual possui o objeto Winston,
mas agora não estamos
passando mais.
Hum, então, poderíamos mudar
isso para que passasse
e, vamos ver, o que passaremos aqui?
Temos que passar winstonTeen. Okay?
Isso funcionou, mas
também parece muito bobo.
Eu já estou chamando
draw no próprio objeto.
Eu não deveria ter que passar o objeto
também. Isso parece redundante.
E isso é verdade, não
deveríamos ter que fazer isso,
então vamos deletar isso
aqui e agora vamos pensar.
Se nós estamos dentro do objeto,
o que poderíamos usar para
acessar as propriedades do objeto.
Bem, você poderia dar uma
olhada no nosso construtor,
e lembre-se da palavra-chave
especial "this" (este) e pense " ahh "
"E se trocarmos this, por isto?" [risos]
Então trocamos winstObject por "this"
Porque agora nós já estamos dentro de
um objeto. Essa função está sendo avaliada
no objeto, então o "this"
irá se referir ao objeto atual.
Dessa maneira
podemos dizer "this"
e teremos acesso a todas as
propriedades deste objeto atual.
E isso realmente funciona, viu?
Não é legal?
Então agora podemos
dizer winstonAdult.draw()
Ta-da! E isso irá acessar as
propriedades do winstonAdult
porque é o objeto que
está sendo chamado.
Então isso é o que é realmente
legal sobre esse palavra-chave "this",
mesmo que seja confuso algumas vezes.
Muito bem, isso foi muito divertido,
então vamos adicionar outro método.
Okay, então, o que mais
o Winston pode fazer?
Talvez ele irá falar. Então nós
faremos um Winston.prototype.talk,
assim nós poderemos anexar quantos
métodos nós quisermos ao prototype.
Então nós iremos dizer "Eu sou Winston!"
E depois nós iremos dizer
this.x+20, e this.y+150.
E então, nada aconteceu, mas isso foi
porque ainda não chamei a função.
Então, vamos fazer o teen talk,
winstonTeen.talk(). Okay.
Eu sou Winston, ta-da!
E depois winstonAdult.talk()
Ta-da! Muito bem,
então agora temos esse
tipo de objeto Winston
que possui propriedades:
apelido, idade, x, y;
e possui funcionalidades:
comportamentos, métodos;
que se comportam diferente
dependendo das propriedades
e podemos criar quantas instâncias
de Winstons nós quisermos
e chama qualquer desses métodos nele.
Bem legal, né?
Legendado por [Gabriel Mello Fernandes]