1 00:00:00,414 --> 00:00:03,370 No último vídeo, nós aprendemos como fazer um tipo de objeto 2 00:00:03,370 --> 00:00:05,865 para representar nossos dois objetos do tipo Winston 3 00:00:05,865 --> 00:00:09,115 e então os inicializamos com os construtores. 4 00:00:09,841 --> 00:00:13,240 Um tipo de objeto não deve apenas ser associado com propriedades. 5 00:00:13,693 --> 00:00:16,160 Também pode ser associado com funcionalidades. 6 00:00:16,160 --> 00:00:20,540 Pense no mundo e em todos os tipos objetos que ele contem, como nós, humanos. 7 00:00:20,540 --> 00:00:22,419 Todos nós possuímos alturas e idades, 8 00:00:22,419 --> 00:00:24,630 mas também possuímos coisas que podemos fazer, 9 00:00:24,630 --> 00:00:26,837 como dormir, comer e programar. 10 00:00:26,837 --> 00:00:30,545 E nós queremos poder associar essas funções com os tipos de objeto. 11 00:00:30,901 --> 00:00:34,654 Neste programa, que é o mesmo que deixamos de lado na última vez, 12 00:00:34,654 --> 00:00:36,185 nós temos uma função aqui, 13 00:00:36,185 --> 00:00:39,371 drawWinston, que podemos chamar nos dois objetos Winston. 14 00:00:40,400 --> 00:00:44,974 Não ficaria melhor se pudéssemos anexar isso ao tipo de objeto Winston? 15 00:00:45,651 --> 00:00:48,492 Bem, nós podemos, e é fácil de se fazer. 16 00:00:48,787 --> 00:00:50,938 Então, embaixo do nosso construtor, 17 00:00:50,938 --> 00:00:55,371 escreveremos Winston, com W maiúsculo, ponto prototype, 18 00:00:55,371 --> 00:00:57,259 e o prototype, essa é uma palavra nova 19 00:00:57,259 --> 00:00:59,847 a qual provavelmente você ainda não tinha visto antes. 20 00:00:59,847 --> 00:01:06,162 E o prototype é uma propriedade de objeto que podemos anexar funções. 21 00:01:06,162 --> 00:01:08,519 E isso irá significar que todo o objeto, 22 00:01:08,519 --> 00:01:12,506 que seja um instância desse, terá essas funções nele. 23 00:01:12,506 --> 00:01:15,897 Então nós podemos dizer ponto prototype e então ponto, 24 00:01:15,897 --> 00:01:19,700 e depois o nome da função, então escrevemos draw, 25 00:01:19,700 --> 00:01:24,709 igual, e então pegamos nosso código drawWinston 26 00:01:24,709 --> 00:01:29,139 e podemos colocá-lo aqui dentro. Tudo bem, 27 00:01:29,139 --> 00:01:32,651 então o que fizemos foi anexar uma função draw 28 00:01:32,651 --> 00:01:35,001 ao nosso protótipo de Winston. 29 00:01:35,001 --> 00:01:37,399 E isso significa que poderemos chamar draw() 30 00:01:37,399 --> 00:01:40,047 em qualquer objeto do tipo Winston. 31 00:01:40,047 --> 00:01:45,415 Muito bem, então poderemos chamar draw() em winstonTeen ou winstonAdult. 32 00:01:45,415 --> 00:01:49,834 E quando temos um função desse tipo, que podemos chamar um objeto, 33 00:01:49,834 --> 00:01:54,420 nós chamamos de "método", então você pode me escutar falar "método" agora. 34 00:01:54,420 --> 00:01:58,234 Então vamos dizer que isso é "um método de desenhar". Okay. 35 00:01:58,234 --> 00:02:01,171 Então agora nós iremos deletar isso, e isso, 36 00:02:01,171 --> 00:02:04,528 e agora veremos se podemos chamar draw(). 37 00:02:04,528 --> 00:02:07,248 winstonTeen.draw() 38 00:02:07,248 --> 00:02:10,137 Okay. Temos um erro, nós tivemos esse erro aqui, 39 00:02:10,137 --> 00:02:13,895 então ele diz: "winstObject não está definido" 40 00:02:13,895 --> 00:02:18,783 Okay. Então antes, nós estávamos passando esse argumento dentro de drawnWinston, 41 00:02:18,783 --> 00:02:21,527 o qual possui o objeto Winston, 42 00:02:21,527 --> 00:02:23,525 mas agora não estamos passando mais. 43 00:02:23,525 --> 00:02:26,311 Hum, então, poderíamos mudar isso para que passasse 44 00:02:26,311 --> 00:02:30,792 e, vamos ver, o que passaremos aqui? Temos que passar winstonTeen. Okay? 45 00:02:30,792 --> 00:02:33,866 Isso funcionou, mas também parece muito bobo. 46 00:02:33,866 --> 00:02:38,430 Eu já estou chamando draw no próprio objeto. 47 00:02:38,430 --> 00:02:43,619 Eu não deveria ter que passar o objeto também. Isso parece redundante. 48 00:02:43,619 --> 00:02:46,106 E isso é verdade, não deveríamos ter que fazer isso, 49 00:02:46,106 --> 00:02:48,531 então vamos deletar isso aqui e agora vamos pensar. 50 00:02:48,531 --> 00:02:50,663 Se nós estamos dentro do objeto, 51 00:02:50,663 --> 00:02:53,924 o que poderíamos usar para acessar as propriedades do objeto. 52 00:02:53,924 --> 00:02:56,451 Bem, você poderia dar uma olhada no nosso construtor, 53 00:02:56,451 --> 00:03:00,859 e lembre-se da palavra-chave especial "this" (este) e pense " ahh " 54 00:03:00,859 --> 00:03:08,733 "E se trocarmos this, por isto?" [risos] Então trocamos winstObject por "this" 55 00:03:08,733 --> 00:03:12,564 Porque agora nós já estamos dentro de um objeto. Essa função está sendo avaliada 56 00:03:12,564 --> 00:03:17,034 no objeto, então o "this" irá se referir ao objeto atual. 57 00:03:17,034 --> 00:03:19,568 Dessa maneira podemos dizer "this" 58 00:03:19,568 --> 00:03:23,554 e teremos acesso a todas as propriedades deste objeto atual. 59 00:03:23,554 --> 00:03:26,934 E isso realmente funciona, viu? Não é legal? 60 00:03:26,934 --> 00:03:31,922 Então agora podemos dizer winstonAdult.draw() 61 00:03:31,922 --> 00:03:35,760 Ta-da! E isso irá acessar as propriedades do winstonAdult 62 00:03:35,760 --> 00:03:38,530 porque é o objeto que está sendo chamado. 63 00:03:38,530 --> 00:03:41,869 Então isso é o que é realmente legal sobre esse palavra-chave "this", 64 00:03:41,869 --> 00:03:45,395 mesmo que seja confuso algumas vezes. 65 00:03:45,395 --> 00:03:49,856 Muito bem, isso foi muito divertido, então vamos adicionar outro método. 66 00:03:49,856 --> 00:03:52,245 Okay, então, o que mais o Winston pode fazer? 67 00:03:52,245 --> 00:03:56,857 Talvez ele irá falar. Então nós faremos um Winston.prototype.talk, 68 00:03:56,857 --> 00:04:00,681 assim nós poderemos anexar quantos métodos nós quisermos ao prototype. 69 00:04:00,681 --> 00:04:05,666 Então nós iremos dizer "Eu sou Winston!" 70 00:04:05,666 --> 00:04:12,475 E depois nós iremos dizer this.x+20, e this.y+150. 71 00:04:12,475 --> 00:04:19,948 E então, nada aconteceu, mas isso foi porque ainda não chamei a função. 72 00:04:19,948 --> 00:04:24,795 Então, vamos fazer o teen talk, winstonTeen.talk(). Okay. 73 00:04:24,795 --> 00:04:30,441 Eu sou Winston, ta-da! E depois winstonAdult.talk() 74 00:04:30,441 --> 00:04:32,726 Ta-da! Muito bem, 75 00:04:32,726 --> 00:04:35,200 então agora temos esse tipo de objeto Winston 76 00:04:35,200 --> 00:04:38,544 que possui propriedades: apelido, idade, x, y; 77 00:04:38,544 --> 00:04:41,760 e possui funcionalidades: comportamentos, métodos; 78 00:04:41,760 --> 00:04:44,946 que se comportam diferente dependendo das propriedades 79 00:04:44,946 --> 00:04:48,797 e podemos criar quantas instâncias de Winstons nós quisermos 80 00:04:48,797 --> 00:04:50,705 e chama qualquer desses métodos nele. 81 00:04:50,705 --> 00:04:52,302 Bem legal, né? 82 00:04:52,302 --> 00:04:53,512 Legendado por [Gabriel Mello Fernandes]