Unveiling the variable "this" on JavaScript | Mayk Brito

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ส.ค. 2024
  • Hey Dev! Everything okay?
    Is 'this', on the several contexts of JavaScript keeping you awake at night? Are you using this concept in an efficient way in your code?
    If you need to know how the context and the scope, strict mode, local and global 'this', how 'this' works in a method, inside a function and even inside a function that is inside another function; beyond knowing how it works in a class...
    This class, then, will help you understand a little bit about how to use these guys.
    We'll also see how the methods: .apply(), .call(), and .bind() can help you manipulate 'this' in several scopes and contexts.
    Beyond that, how the arrow function works in these scenarios.
    I hope this makes sense to you!! 💜
    Repository: github.com/Roc... (in Portuguese)
    -----
    Follow Rocketseat on our social media:
    Website: www.rocketseat...
    Twitter: / rocketseat
    Facebook: / rocketseat
    Instagram: / rocketseat_oficial
    Comunity: comunidade.rock...
    Blog: rocketseat.com...

ความคิดเห็น • 108

  • @ygorluiz
    @ygorluiz 5 ปีที่แล้ว +5

    Em tempos de desemprego poucas pessoas disponibilizam conteúdo de qualidade e totalmente de graça, te desejo todo sucesso desse mundo e obrigado !

  • @espiritfox
    @espiritfox ปีที่แล้ว +1

    cara!! seu vídeo já tem 3 anos e foi a melhor explicação que vi até agora!!! parabens

  • @SektorLK979
    @SektorLK979 5 ปีที่แล้ว +47

    Fala Mayk, blz? Ótimo vídeo! Só uma coisa: O contexto (this) representa um objeto em questão e não a função. A função tem um contexto se ela estiver dentro de um objeto ou se você passar um contexto pra ela como no call, bind e apply, do contrário this é undefined. O this é atribuído ao objeto na Creation Phase do contexto de execução. Você consegue acessar o this em uma função em um contexto global, seja browser ou ambiente node, pq existe também um objeto global tanto para o browser (window) quanto para o node. (Global Object). Mas o contexto refere-se ao objeto e não a função

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว +19

      Maninho. Obrigado pelo comentário brother. Excelente. 💜💜💜

    • @tdias25
      @tdias25 5 ปีที่แล้ว +1

      o this não funciona parecido com um escopo dinâmico? só que só leva em consideração como foi chamada (call site)? falo isso em referência ao seu comentário sobre "creation phase"

    • @SektorLK979
      @SektorLK979 5 ปีที่แล้ว +5

      @@tdias25 Talvez não tenha entendido o que você quis dizer mas acho que você confundiu contexto de objeto com escopo léxico e closures. Escopo e contexto são coisas diferentes. Contexto (this) é um valor que faz referência à um objeto, e escopo é o limite onde expressões e valores são visíveis. Existe uma grande confusão entre essas duas coisas porque no JS existem 2 "tipos" de contexto, o contexto de execução e o contexto de objeto, ambos são chamados de contexto mas são coisas diferentes.

    • @tdias25
      @tdias25 5 ปีที่แล้ว

      @@SektorLK979 sim, eu disse contexto de execução, que seria algo "" parecido "" como funciona uma linguagem que tem escopo dinâmico

    • @toninhodiasjr
      @toninhodiasjr 4 ปีที่แล้ว

      Jonatas, o que você falou se aplica neste código abaixo? Pois se eu trocar o this pelo nome da variável o código não roda.



      Document

      .btn {
      width: 100%;
      height: 75px;
      }
      .quadrados {
      margin: 0;
      }

      Adicionar Quadrado



      var btn = document.querySelector('.btn')
      var div = document.querySelector('.quadrados')
      btn.addEventListener('click',add)
      function add(){
      var create = document.createElement('button')
      div.appendChild(create)
      create.setAttribute('class','red')
      create.innerText = "Quadrado"
      //create.style.width = '100px'
      //create.style.height = '100px'
      //create.style.backgroundColor = 'red'
      //create.style.margin = '5px'
      //create.style.float = 'left'
      //create.style = 'width:100px;height:100px;background:red;margin:5px;float:left'
      create.setAttribute('style','width:100px;height:100px;background:red;margin:5px;float:left')
      create.addEventListener('mouseover',color)
      }
      function color() {
      var newBtn = document.querySelectorAll('.red')
      this.style.backgroundColor = getRandomColor()
      }
      function getRandomColor() {
      var letters = "0123456789ABCDEF";
      var color = "#";
      for (var i = 0; i < 6; i++) {
      color += letters[Math.floor(Math.random() * 16)];
      }
      return color;
      }
      var newColor = getRandomColor();

  • @matheusvoalide2649
    @matheusvoalide2649 5 ปีที่แล้ว +4

    nem assisti o video ainda, mas ja sei q é de otima qualidade.

  • @joaodasfabulas
    @joaodasfabulas 5 ปีที่แล้ว +3

    Esse canal está cada vez melhor, parabéns aos organizadores!

  • @mauroanselmooliveira
    @mauroanselmooliveira 4 ปีที่แล้ว

    A clareza e objetividade do video são impressionantes! Parabéns! Melhor video em PT-BR sobre o assunto !

  • @LucasRocha-lp2zi
    @LucasRocha-lp2zi 2 ปีที่แล้ว

    Ja havia procurado em vários lugares e vários blogs uma definição e uma explicação, aqui foi muito maneiro, entendi perfeitamente!!!!!
    MUITO OBRIGADO!

  • @ruanvalente7496
    @ruanvalente7496 5 ปีที่แล้ว +3

    Incrível Mayk, sua didática é excelente passando o conteúdo de forma clara e objetiva. Parabéns para toda a equipe pelo excelente conteúdo ! Sucesso galera !!

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว

      Grande Ruan!! Obrigado pelo comentário manin! Tamo junto!! Bora pra cima!!

  • @arroz_julio2270
    @arroz_julio2270 2 ปีที่แล้ว

    Minha mente expandiu muito em relação ao This depois desse vídeo, obrigado!!

  • @felipedantas8153
    @felipedantas8153 3 ปีที่แล้ว

    Esse Mayke brito manda bem demais, os vídeos dele são incríveis! parabéns mais um conteúdo top!

  • @mattfelix4990
    @mattfelix4990 5 ปีที่แล้ว +5

    Cara, eu curto os vídeos do Mayk

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว +1

      grande Matt!! TAMO JUNTO MANO!! bora pra cima!!

  • @gelson_ferreira
    @gelson_ferreira 3 ปีที่แล้ว

    Venho estudando javascript a fundo e você esta dar um grande ajuda. obrigado

  • @netasilva_
    @netasilva_ 5 ปีที่แล้ว +1

    Mayk ótima explicação, eu peguei esse conteúdo com o Daciuk e agora revi com você. Acho que você é bem didático também e deveria investir nisso kk

  • @user-zv6vl6ne9z
    @user-zv6vl6ne9z 4 ปีที่แล้ว +6

    Minha maior dificuldade até agora com JS é esse this e o prototype.
    Vou assistir esse video pra v se ajuda.

    • @luccaspio2254
      @luccaspio2254 4 ปีที่แล้ว +2

      Thiago, também. Muito do que foi dito em relação aos erros e cuidados com as pegadihas precisa de um pouco de experiência e vivência pra lidar e realmente aprender, mas quanto mais codo, mais essas dificuldade vão embora.

    • @LucasLima-hj5sg
      @LucasLima-hj5sg 2 ปีที่แล้ว +1

      Assino embaixo, não se bitole em decorar tudo de uma vez só. Muita coisa você aprende codando e errando, aprenda os conceitos e pratique bastante

  • @leonardoraupp7830
    @leonardoraupp7830 2 ปีที่แล้ว

    Primeira vez que consegui entender o This, muito obrigado!

  • @JefSueth
    @JefSueth 4 ปีที่แล้ว +1

    caraca, esse vídeo tem o conceito de encapsulamento de POO em javascript!

  • @andrelima8462
    @andrelima8462 2 ปีที่แล้ว

    Muito bom estava com duvida no this. Vlw Maykão.

  • @BrenoNovelli
    @BrenoNovelli 5 ปีที่แล้ว +1

    Show. Ainda me ajudou a entender método e class um pouco mais. Demorei um pouco pra entender o lance do call. Mas depois foi bem.

  • @gusprado
    @gusprado 4 ปีที่แล้ว +1

    Excelentes exemplos. Parabéns Mayk!!

    • @maykbrito
      @maykbrito 4 ปีที่แล้ว +1

      valeu mano!!

  • @LucasLima-hj5sg
    @LucasLima-hj5sg 2 ปีที่แล้ว

    Ótimo vídeo Maykão. O this no JS pode ser muito duro às vezes, mas esse vídeo faz um ótimo trabalho explicando os vários casos de uso

  • @JoaoGabriel-pk1ii
    @JoaoGabriel-pk1ii 4 ปีที่แล้ว +1

    Tem como dar mais de um like?
    Conteúdo top d+ parabéns

  • @o-autentico
    @o-autentico 5 ปีที่แล้ว +2

    noosa que video maravilhoso parabens cara

  • @bl1tz_x
    @bl1tz_x 2 ปีที่แล้ว

    Maykão é incrível desde sempre

  • @thiagobevilaqua3303
    @thiagobevilaqua3303 5 ปีที่แล้ว +2

    Caramba o cara matou a pau o assunto. Parabéns!!! :D

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว +1

      Hahahahaha tamo junto hajaj

  • @andreytsuzuki5503
    @andreytsuzuki5503 4 ปีที่แล้ว

    Que conteúdo maravilhoso!!!
    Vou compartilhar com um monte de gente.

  • @brunobaldaia5202
    @brunobaldaia5202 2 ปีที่แล้ว

    Mayk fodão como sempre! Mestre!!!

  • @felipedantas8153
    @felipedantas8153 3 ปีที่แล้ว

    aula incrível parabéns mayk, muito bom esses vídeos

  • @principe.borodin
    @principe.borodin 5 ปีที่แล้ว +2

    Excelente dica

  • @viniciusbarbosa4635
    @viniciusbarbosa4635 5 ปีที่แล้ว +6

    Amigos da Rocketseat
    , quando sai a proxima inscrição para o BootCamp?

    • @fpsgameplaypcs
      @fpsgameplaypcs 5 ปีที่แล้ว +1

      Também estou na espera. Deve sair daqui uns 3 a 4 meses. Levando em consideração o ultimo.

  • @PhilippeHenrique
    @PhilippeHenrique 4 ปีที่แล้ว

    Essa explicação do bind foi genial! Obrigado!

  • @ajoco99
    @ajoco99 4 ปีที่แล้ว

    Excelente explicação Maykao

  • @__und3f1n3d__
    @__und3f1n3d__ 4 ปีที่แล้ว

    Sentido? Cara, que aula maravilhosa!
    Ótima didática e exemplos, Mayk! Só achei um pouquinho zuado a forma como o navegador lida com os escopos. (Mãããs deve ser coisa minha mesmo). O node me parece mais organizado com o module.exports . No mais, é muito interessante ver as diversas alternativas para lidar com as variações do this! rs Obrigado e Obrigado!

  • @lucaswilliam8707
    @lucaswilliam8707 4 ปีที่แล้ว

    aula boa dms, me ajudou muito a entender isso !!!

  • @danielajardim6332
    @danielajardim6332 4 ปีที่แล้ว

    mto boa aula. Obrigada Mayk

  • @amagami1008
    @amagami1008 11 หลายเดือนก่อน

    Faltou falar a arrow functiion dentro da estrutura Class ele tem um comportamento diferente daquele jeito objeto declararado sem o Class

  • @juliocesar2159
    @juliocesar2159 5 ปีที่แล้ว +6

    Carai estava estudando isso agora nesse momento e aparece a notificação da Rocketseat ainda bem to meio confuso em relação ao this.

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว +1

      hahaha que massa isso mano!! hahaha tomara que te dê uma luz aí!! =D

  • @gabrielpereiramendes3463
    @gabrielpereiramendes3463 2 ปีที่แล้ว

    #Excelente!

  • @willianzuqui8005
    @willianzuqui8005 5 ปีที่แล้ว

    Gostei, me lembrou muito o principio OCP

  • @mucicolin
    @mucicolin 4 ปีที่แล้ว

    Muito bom!! Parabéns!

  • @joseaugustomegres7868
    @joseaugustomegres7868 5 ปีที่แล้ว +1

    Slc, to amando a rs

  • @arthurlara852
    @arthurlara852 3 ปีที่แล้ว

    Nuss que dlç de explicação. Depois de eras tentando entender essa fita do this.

    • @rocketseat
      @rocketseat  3 ปีที่แล้ว +1

      Boaaa Arthur!! Valeeu pelo feedback ! 💜

  • @JeanPaulll
    @JeanPaulll 4 ปีที่แล้ว

    Parabéns meu caro!

    • @maykbrito
      @maykbrito 4 ปีที่แล้ว

      obg Jean!

  • @Saudavelpro
    @Saudavelpro 5 ปีที่แล้ว +1

    Podia fazer um de promises ou iterators

  • @douglasazevedo2586
    @douglasazevedo2586 2 ปีที่แล้ว

    The Window.name property gets/sets the name of the window's browsing context

    • @douglasazevedo2586
      @douglasazevedo2586 2 ปีที่แล้ว

      Note: window.name converts all stored values to their string representations using the toString method.

  • @xmatheusftc
    @xmatheusftc 5 ปีที่แล้ว

    Glr preciso de uma ajuda, creio eu que meu problema é com o this... Criei um componente no react-native que é um slider com varios videos, nisso eu exporto ele, e é passado varios URls através das props... Quando eu importo esse componente algumas funções ficam compromentidas, botão de pause/play não funciona, duas setas para passar os videos no scrollview também perdem a função. Ah, eu havia testado em uma tela de 'teste' sem importar, renderizando o componente sozinho, e ele funcionou perfeitamente.

  • @r.m.2000
    @r.m.2000 3 ปีที่แล้ว

    mas e o Global x Module.Exports? vc dizia que o this muitas vezes estava no global, mas quando dizia global nesse caso estava se referindo ao module.exports do arquivo, mas o global global mesmo, é diferente...

  • @tiosam1041
    @tiosam1041 4 ปีที่แล้ว

    Obrigado pelo video :D

  • @gilmarvictor4410
    @gilmarvictor4410 4 ปีที่แล้ว

    Essa aula me salvou kakaka

    • @rocketseat
      @rocketseat  4 ปีที่แล้ว

      Aeee! 💜💜💜

  • @gabrielrufino9041
    @gabrielrufino9041 5 ปีที่แล้ว

    Bom demais!

  • @brunozago8855
    @brunozago8855 5 ปีที่แล้ว

    Cara, é muito complicado ativar o mic do fone e ouvir em tempo real no speaker? Como eu poderia fazer esta função? Valeu!

  • @PhilippeHenrique
    @PhilippeHenrique 4 ปีที่แล้ว

    Qual tema vc usa no VS-CODE?

  • @linecker94
    @linecker94 2 ปีที่แล้ว

    será que é tão difícil fazer algo bem padronizado? (a linguagem)

  • @felipedantas8153
    @felipedantas8153 3 ปีที่แล้ว

    16:30 fiz no meu vs code e retornou o valor global estou estranhando demais essas coisas de escopo acho que mudaram algo

  •  5 ปีที่แล้ว +3

    Heisenberg

    • @maykbrito
      @maykbrito 4 ปีที่แล้ว +1

      entendedores entenderão hahah

  • @camilaisabela
    @camilaisabela 4 ปีที่แล้ว

    Se colocasse Camila Isabela 34 eu diria que sou eu! Ha ha ha 💙

  • @nalbertcerqueira6079
    @nalbertcerqueira6079 ปีที่แล้ว

    SEGUE ABAIXO UM RESUMÃO COM VÁRIOS CASOS DO THIS E ALGUMAS EXPLICAÇÕES
    ------------------------ CONTEXTO DE EXECUÇÃO DE UM MÉTODO --------------------------
    1) [This dentro de um método utilizando function declaration]
    * Com ou sem "use strict": o this faz referência apenas ao objeto (node e browser)
    2) [This dentro de um método utilizando arrow function]
    * Com ou sem "use strict": o this retorna um objeto vazio (node) ou o objeto global (browser)
    isso ocorre pois arrow function heda o this do escopo/contexto acima, como acima dela não
    tem mais nenhuma função, ela pega o objeto global no browser ou um objeto vazio no caso do node.
    Vale ressaltar que um objeto não é um escopo ou contexto de execução. Os métodos feitos
    com funciton declaration referenciam o objeto porque a linguagem quis assim, e não porque um objeto cria escopo.
    3) [this dentro de function declaration dentro de método feito com function declaration]
    * Com "use strict": como this dentro de uma function declaration que não é método retorna undefined, logo ela
    retornará undefined, ignorando a função (que é um método) logo acima dela (node e browser)
    * Sem "use strict": como o this dentro de uma function declaration que não é método retorna o objeto global,
    logo ele retorna o objeto global, ignorando a outra função acima dele (node e browser)
    4) [this dentro de arrow function dentro de método feito com function declaration]
    * Com ou sem "use strict": como arrow functions herdam o this do escopo/contexto acima, a arrow function
    herdará o this do método criado com function declaration, e como o méotodo com function declaration retorna
    o objeto o qual o método está inserido, logo o this retornará o próprio objeto (node e browser)
    5) [this dentro de arrow function dentro de método feito com arrow function]
    * Com ou sem "use strict": this retornará um objeto vazio caso esteja no node,
    ou retornará o objeto global caso esteja no browser.
    --------------------- CONTEXTO DE EXECUÇÃO DE FUNÇÃO QUE NÃO É MÉTODO ----------------------
    [This dentro de uma function declaration que não é método]
    * Com "use strict": o this não faz referencia ao escopo global, retornando undefined (node e browser)
    * Sem "use strict": o this faz referência ao objeto global (node e browser)
    [This dentro de uma arrow function dentro de uma function declaration que não é método]
    * Com "use strict": a arrow function herdará o this do escopo acima, ou seja da function delcaration,
    e a function declaration no modo estrito retorna this como undefined, portanto this será undefined (node e browser)
    * Sem "use strict": a arrow function herdará o this do escopo acima, ou seja da function delcaration,
    e a function declaration sem modo estrito retorna this como objeto global, logo, this será global (node e browser)
    [This dentro de uma arrow function dentro de uma arrow function que não é método]
    * Com ou sem "use strict": o this nesse caso retornará um objeto vazio no caso do node
    ou o objeto global no caso do browser

  • @Igor-vk8fl
    @Igor-vk8fl 2 ปีที่แล้ว

    O que raios é VIZ??????

  • @jonastavares420
    @jonastavares420 5 ปีที่แล้ว +1

    Agooora entendi o/

  • @dialeletico
    @dialeletico 5 ปีที่แล้ว

    fragmento de POO?

  • @jgalmeida93
    @jgalmeida93 5 ปีที่แล้ว

    Excelente vídeo! Você usa Linux? Se sim, qual distro?

    • @tdias25
      @tdias25 5 ปีที่แล้ว

      Senão for mac, parece ser o Kubuntu ou Xubuntu

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว +2

      Opa. Valeu brother. Uso o Kali Linux

    • @jgalmeida93
      @jgalmeida93 5 ปีที่แล้ว

      @@maykbrito Massa! Curto muito seus vídeos, didática excelente, parabéns!

  • @diogo.takeshi
    @diogo.takeshi 5 ปีที่แล้ว

    Sou iniciante começando do 0 algum curso para recomendar para começar a programar desde ja agradeço

    • @toninhodiasjr
      @toninhodiasjr 4 ปีที่แล้ว

      Cara, começa com o Curso em Vídeo do TH-cam. Depois parte pra esse aqui.
      skylab.rocketseat.com.br/node/curso-java-script/group/manipulando-a-dom/lesson/alterando-estilos
      E vai fazendo os exercícios.

  • @otaviocr9434
    @otaviocr9434 5 ปีที่แล้ว +2

    Repositório não existe :/

    • @maykbrito
      @maykbrito 5 ปีที่แล้ว +1

      fala manin!! liberado.. obrigado pelo comentário!!

  • @mateusrocha4941
    @mateusrocha4941 4 ปีที่แล้ว

    Cara, eu não entendi PN

  • @ToshiroKiss
    @ToshiroKiss 5 ปีที่แล้ว +1

    this significa isto, esta? pensei que significasse DEMONIO, CAPETA, DESGRAÇA. opskaopskaopksoapsopakoska

    • @maykbrito
      @maykbrito 4 ปีที่แล้ว

      aieuhaeiouahuihfe.. no JavaSpirit sim kkkkkk

  • @mateushenrique6421
    @mateushenrique6421 5 ปีที่แล้ว +1

    Segundo

  • @jerfsonconceicao853
    @jerfsonconceicao853 5 ปีที่แล้ว

    Luis. Filipe
    Kauã

  • @denissouza8857
    @denissouza8857 5 ปีที่แล้ว +1

    3 anos de estudo resumido em 48 minutos. SEN-SA-CI-O-NAL. value @Mayk Brito

    • @maykbrito
      @maykbrito 4 ปีที่แล้ว

      hahahah que bom!!! obg pelo feedback

  • @contraponto193
    @contraponto193 3 ปีที่แล้ว

    vim buscar bronze e achei ouro XD

  • @amagami1008
    @amagami1008 11 หลายเดือนก่อน

    Esse this no Javascript é uma bagunça, alguém por favor arrume essa bagunça

  • @caiqueandrade9523
    @caiqueandrade9523 3 ปีที่แล้ว

    uma aula de 47 minutos e eu só entendo o idioma kkkk

    • @caiqueandrade9523
      @caiqueandrade9523 3 ปีที่แล้ว

      maaas, contudo, toda via, muito obrigado pelo conteúdo!!!

  • @FabimBdz
    @FabimBdz ปีที่แล้ว

    Esse aprofundamento todo deveria ter no curso pago do Explorer, porque as explicações lá deixam muito a desejar..

  • @axfilipe
    @axfilipe 5 ปีที่แล้ว +2

    Por isso que eu praticamente só uso TypeScript, JavaScript é uma salada que só por Deus.

  • @r.m.2000
    @r.m.2000 3 ปีที่แล้ว

    que aflição ver vc colocar ";", no node nao precisa mais de ";"...tente nao usar vera que despoluirá todo o codigo

    • @amagami1008
      @amagami1008 11 หลายเดือนก่อน

      Não