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]