16.17: Inheritance in JavaScript - Topics of JavaScript/ES6

Поділитися
Вставка
  • Опубліковано 20 лип 2024
  • In this video, I discuss the concept of inheritance in Object-Oriented Programming (OOP) with JavaScript and using ES6 classes. Code: thecodingtrain.com/tracks/top...
    🕹️ p5.js Web Editor Sketch: editor.p5js.org/codingtrain/s...
    Videos:
    🚂 Introduction to Inheritance: • 4.5: Introduction to I...
    🚂 Introduction to Polymorphism: • 4.7: Introduction to P...
    🚂 Classes in JavaScript: • 6.2: Classes in JavaSc...
    Timestamps:
    0:00 Inheritance in JavaScript
    0:18 Core principles of object oriented programming
    0:36 Other videos about these topics
    1:41 What is an ES6 class?
    3:25 The code I've already written
    4:03 Using a variable for types of particles
    5:31 Let's copy and paste to make two classes!
    6:53 There has got to be a better way. What is that?
    7:30 How to make a class that inherits from another class
    10:13 Let's make a child class!
    11:18 Augmenting and Overriding
    12:24 Let's do some augmenting and overriding!
    13:30 What if we want to do the same thing as the parent class but more?
    14:37 A couple things to note
    15:15 What is an inheritance tree?
    16:46 What's next?
    Editing by Mathieu Blanchette
    Animations by Jason Heglund
    Music from Epidemic Sound
    🚂 Website: thecodingtrain.com/
    👾 Share Your Creation! thecodingtrain.com/guides/pas...
    🚩 Suggest Topics: github.com/CodingTrain/Sugges...
    💡 GitHub: github.com/CodingTrain
    💬 Discord: thecodingtrain.com/discord
    ✪ Nebula: go.nebula.tv/codingtrain
    💖 Membership: ua-cam.com/users/thecodingtrainjoin
    🛒 Store: standard.tv/codingtrain
    🖋️ Twitter: / thecodingtrain
    📸 Instagram: / the.coding.train
    🎥 Coding Challenges: • Coding Challenges
    🎥 Intro to Programming: • Start learning here!
    🔗 p5.js: p5js.org
    🔗 p5.js Web Editor: editor.p5js.org/
    🔗 Processing: processing.org
    📄 Code of Conduct: github.com/CodingTrain/Code-o...
    This description was auto-generated. If you see a problem, please open an issue: github.com/CodingTrain/thecod...
    #inheritance #oop #javascript

КОМЕНТАРІ • 141

  • @seancpp
    @seancpp 5 років тому +50

    Love the video! Just one thing:
    Make sure to clarify that the ES6 classes are still using the same prototypal inheritance as normal JS, and shouldn't be confused with the way inheritance works in languages like C++ and Java. (only the syntax is similar)
    The prototype chain and the quirks of the "this" context are all still present. The syntax for classes in ES6 hides this fact and can cause a lot of confusing errors.
    Hope this makes sense.

  • @PuzaExplores
    @PuzaExplores 5 років тому +52

    I have always dreamed of a teacher like you 😍.

  • @WaseemYusuf
    @WaseemYusuf 5 років тому +8

    Honestly, these videos are so wholesome, I never thought the day would come where I'm gonna watch OOP explanation videos on UA-cam just to brighten up my day, but here we are.

  • @CodingAdventures
    @CodingAdventures Рік тому +1

    Oldies but goldies. This is a nice video with a good explanation!

  • @oksanaserhiivna2634
    @oksanaserhiivna2634 5 років тому +1

    I wish all videos about JS were the same expressive and enthralling as yours. :) Many thanks for your work!

  • @danielluna7648
    @danielluna7648 3 роки тому

    Great video! I like how this series dives into the theory and what's happening under the hood and why more than your typical videos. I'm not the type of person who can just say "because that's how it works", I have to know WHY. So thank you.

  • @mattmmilli8287
    @mattmmilli8287 5 років тому +3

    Your dedication to educating about JS is impressive. I hope this channel pays of for you in the end even if that is not the goal.

  • @lukasluftlaufer1093
    @lukasluftlaufer1093 4 роки тому +1

    Oh Daniel, you helped me once again so much! Thank you for these videos!!! You really are the best.

  • @mshahzebraza
    @mshahzebraza 2 роки тому

    Wow! It's real fun to see your code. You're so immersed in what you're doing brother. Keep it up!

  • @Patrick-iy1rb
    @Patrick-iy1rb 4 роки тому +6

    You are my new favorite teacher. I hope you'll decide to start teaching full JavaScript courses and sell them at Udemy or something.

  • @Jbortoletto
    @Jbortoletto 5 років тому +3

    Hi Mr. teacher! Your classes are awesome, no matter if subjects are simple or complex. Thank you for sharing and inspiring!

  • @williamhorn411
    @williamhorn411 2 роки тому

    I love how straight-to-the-boint this video is!

  • @aparnaiyer5873
    @aparnaiyer5873 3 роки тому +1

    How wonderful! Your energy is infectious, thanks sir!

  • @kingykronous2284
    @kingykronous2284 5 років тому +3

    I've recently discovered your channel and I love it!

  • @mxc_clips
    @mxc_clips 4 роки тому

    Your videos are the best. I am smiling while learning and watching a js tutorial.
    I always hope that someday I could take my skills and become a teacher to the next generation of programmers and I strive to be as good a teacher as you!

  • @iamamirali3424
    @iamamirali3424 3 роки тому +1

    I couldn't understand how to use Super correctly to inherit the mother class until I found your video. Thanks for this paranormal energy!

  • @RSkyCar
    @RSkyCar 5 років тому

    Thank you Daniel! It was really useful stream, I learned a lot, so it's all makes sense now, how to write less code and organize a project. Hope you continue with Polymorphism in the next video.

  • @vishank7
    @vishank7 4 роки тому

    It feels sooo good to understand something like this! Thank you sir!

  • @PiyushKumar-qj8ue
    @PiyushKumar-qj8ue 5 років тому +13

    Expert, always motivating me.

  • @kabirrsinghsahni7792
    @kabirrsinghsahni7792 4 роки тому

    He has the all-new ways to learn code, cheers!

  • @reimarpb
    @reimarpb 5 років тому +5

    Awesome! Btw I do like it when you start explaining classes and everything, even though I already know that and I'm here to learn about inheritance, but it does make it easier to understand

  • @d_v_d1070
    @d_v_d1070 5 років тому

    happy to see concepts as such explained.

  • @dhaval1489
    @dhaval1489 5 років тому +1

    I am python guy and not don't understand JS for now, but I saw your video on Git and become a fan, I will do some basics of JS and come back

  • @ShaneLeeCoding
    @ShaneLeeCoding 5 років тому +1

    When I was learning Java, Interitance was something that took me a while to get my head around. I wish I had this video when I was learning this. You've made this way more clear than anyone else. Thanks Daniel.

  • @ashwinramaswamy4059
    @ashwinramaswamy4059 3 роки тому +1

    For those using the Processing desktop editor - you might sometimes get a weird console error saying the superclass name is not defined when you try to extend it. I think this is because the editor rewrites index.html to always execute your .js files in alphabetical order of their filenames. So if you make a file 'B.js' and another 'A.js' where class A extends class B, you'll get a console error saying 'B is undefined', because it executes the subclass first.
    My solution is to just rename your subclasses to something beginning with a different alphabet, but it's a weird editor bug I think.

  • @7Chikchan
    @7Chikchan 5 років тому

    Really appreciate your videos! Learned a lot from you

  • @codybui6252
    @codybui6252 Рік тому

    Wonderful lesson. Thank you very much.

  • @FernandoPonteFilho
    @FernandoPonteFilho 5 років тому +2

    It's awesome to have english subtitles, thanks.

  • @halimchu9346
    @halimchu9346 4 роки тому

    super duper helpful! Thank you!

  • @charlesngerem3198
    @charlesngerem3198 2 роки тому

    You're simply a blessing

  • @tntdogs6910
    @tntdogs6910 4 роки тому

    Nice video, helped me. I'm doing web-components now in my comp sci class

  • @hailahong3021
    @hailahong3021 5 років тому

    Man. That’s what I need

  • @hi-techlogics3831
    @hi-techlogics3831 3 роки тому

    You are a universal treasure.

  • @imajt5
    @imajt5 4 роки тому

    Wow, you are awesome. Really great explanation.

  • @juliofslt
    @juliofslt 3 роки тому +1

    I think I already found my fav coding channel on YT, you make the learning process really enjoyable! :)

  • @bestformspielt
    @bestformspielt 5 років тому

    Your hand drawn curly braces are outrageous! ;)

  • @nicchunglow
    @nicchunglow 3 роки тому

    You are really good at teaching!

  • @marnix2452
    @marnix2452 5 років тому +7

    It would be cool if you make an implementation of the strategy design pattern. It follows the design principle "favour composition over inheritence"

  • @pinkleprechaun52
    @pinkleprechaun52 2 роки тому

    The most adorable teacher on youtube

  • @johnjohnson4484
    @johnjohnson4484 4 роки тому +1

    your tuts are the gold standard here on yt

  • @misdi_official
    @misdi_official 5 років тому +2

    love it

  • @hoxas
    @hoxas 3 роки тому +1

    Best teacher ever, lol burst out laughing at boint.

  • @osamasy5802
    @osamasy5802 4 роки тому

    You are really the best @😊

  • @lavdixit2267
    @lavdixit2267 3 роки тому

    you explained it very well

  • @palinejs
    @palinejs 5 років тому

    Great!

  • @russellge2372
    @russellge2372 4 роки тому

    Thank u so much, sir!

  • @carlkitstie
    @carlkitstie Рік тому

    You are just amazing

  • @AhmadAlmutiry
    @AhmadAlmutiry 5 років тому

    Thank you,
    May you explain what difference between abstraction and encapsulation?

  • @pierrem2983
    @pierrem2983 5 років тому

    I finally realized that you have to be a good programmer to code in JavaScript

  • @slyer7695
    @slyer7695 5 років тому

    Love from Italy!!!! ❤️❤️❤️❤️ 🇮🇹 #LoveFromItaly8

  • @shaimaa3424
    @shaimaa3424 4 роки тому

    U made me love Coding 😍😍😍😂😂

  • @bluestonecreeper720
    @bluestonecreeper720 5 років тому

    Hi coding train. Take a look at the came screeps. Good vid

  • @kingundfaker
    @kingundfaker 4 роки тому +1

    Inheritance starts at 7:20

  • @rdmammad5721
    @rdmammad5721 4 роки тому

    Perfect tutor ever😂

  • @frankkj1995
    @frankkj1995 3 роки тому

    Boint! Ha that made me chuckle :)

  • @xomayaaxo
    @xomayaaxo 4 роки тому

    dude you're awesome

  • @hussainsalih9736
    @hussainsalih9736 5 років тому

    Thank you

  • @luismolinatanco1330
    @luismolinatanco1330 3 роки тому

    I am 49 yrs old. I grew as a programmer with c++. Since 2007 or so I use Processing and Arduino in my teaching. I love your videos and from watching them I’m wondering if I should be teaching p5.js instead of Processing. My students are Fine Arts students. I would love to have a conversation with you about this!

  • @jeranto24
    @jeranto24 5 років тому

    SENSEIIII!!

  • @limitless1692
    @limitless1692 4 роки тому

    Thanks

  • @sydneyhill655
    @sydneyhill655 2 роки тому

    Thanks!

  • @paraschavan014
    @paraschavan014 5 років тому +1

    Wooo I am learning inheritance (Java)
    In my college

  • @ellpell6550
    @ellpell6550 Рік тому

    Nice thanks

  • @lubomiratanasov6714
    @lubomiratanasov6714 5 років тому

    Hi,
    I would like to know, what is the difference between Class-Inheritance and Object-inheritance.
    Thank you.

  • @josephgaribaldi4340
    @josephgaribaldi4340 5 років тому

    I'm one of the people that's beeen watching you from the future. So had the opportunity to notice your hair styles evolution .... from happy relaxed to happy "businessman" style. So is this latest style just temp?

  • @zacharymcarthur9013
    @zacharymcarthur9013 4 роки тому

    I’m curious you said that a class can only inherit one other class, do you mean for example I couldn’t say “class Bat extends mammal, bird” to for example get the mammal class and as well pull flight from the bird class? I hope that makes sense. Thank you.

  • @Thanveershah
    @Thanveershah 5 років тому

    I challenge you to create an animated colorful smoke , You are amazing btw

  • @horseoperamarker
    @horseoperamarker 3 роки тому

    yes

  • @liamrobertson2670
    @liamrobertson2670 5 років тому

    You should go over getters and setters. Factory functions would be great too

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      Oh good idea! Please suggest here! github.com/CodingTrain/Rainbow-Topics/issues

  • @grainfrizz
    @grainfrizz 5 років тому

    C# does object oriented the best way possible (in my own opinion). Abstract, interface, struct...these are all super intuitive. But I understand that JS is interpreted lang and is not strongly typed. That's why it so short-handed.

    • @forktrader7870
      @forktrader7870 5 років тому

      hello kababayan. 😂 JS is a gift and curse. they have simple class object capacity but it helps other professonals to create something that doesnt need to dig deeper the behind object-oriented programming and shoot their feet with diamond object problem etc. and no need VS download/setup on their system. anyways, thats your opinion. keep it up kababayan. ✌️

  • @grahamhelton5395
    @grahamhelton5395 5 років тому

    So to create the Tree, you would for example (in place of Particle class) have Animal class and then the (in place of Confetti class) have 'class Mammal extends Animal'? To do the tree would the next just be for example 'class Four legs extends Mammal' or 'class Four legs extends Animal'? Does the new class become the new super class?

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      You can do either! But "class FourLegs extends Mammal" would by definition also extend Animal, but not the other way around!

  • @aleksd286
    @aleksd286 5 років тому

    As a JS developer I can say that composition is preferred over inheritance. Please do a video about it, people will love it 😀

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      Can you link to some good resources so I can read up on and research?

    • @aleksd286
      @aleksd286 5 років тому

      @@TheCodingTrain I think this article explains it well. medium.com/humans-create-software/composition-over-inheritance-cb6f88070205

  • @forktrader7870
    @forktrader7870 5 років тому

    do you really need different classes to work with? and is it really bad to have conditionals within the class? example I have BigDataGrid class, do I really need to create separate DataGrid for each report? it seems highly maintainable in the future but highly quite alot to type with. anyway, thanks for the idea.

  • @toxin0343
    @toxin0343 5 років тому

    could you use the super keyword for the show function for example
    show(){
    super.show()
    fill(this.bright)
    square(this.x, this.y, this.r)
    }
    or would it cause errors or would it just draw it as a circle .
    edit: I will be trying this myself and will comment what happens but wanted to comment in-case I forget

    • @TheCodingTrain
      @TheCodingTrain  5 років тому +2

      Yes, you can do this! In the case above it'll draw both the circle and the square.

    • @toxin0343
      @toxin0343 5 років тому

      @@TheCodingTrain and would they be at the same x and y position? Would the square be on top because it runs after the particle? Thanks for the quick response

    • @TheCodingTrain
      @TheCodingTrain  5 років тому +1

      @@toxin0343 Indeed they would be at the same x,y b/c each object only has that one x,y! It's the same as if you had called circle() directly in show().

    • @toxin0343
      @toxin0343 5 років тому

      Thanks for the quick reply love the channel

  • @idontwantmynameinhere
    @idontwantmynameinhere 5 років тому

    Are you going to make videos on polymorphism and encapsulation? And if you already did, where can I find those videos?

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      Here's a video about the basic idea of OOP (encapsulation) - ua-cam.com/video/T-HGdc8L-7w/v-deo.html - and the polymorphism video will come out later today or this weekend.

  • @hussainsalih9736
    @hussainsalih9736 5 років тому +1

    I want ask you how to read text file in javascript???

  • @alexblue8524
    @alexblue8524 4 роки тому +1

    I wanted the code from this video. does someone knows how can I get that ?

  • @tomgibbons2230
    @tomgibbons2230 5 років тому

    Is Nodes implementation of JS different? This doesn't work for me - the super(x,y) is not a valid keyword. Regardless, great video. You're the man! :-)

  • @mrlectus
    @mrlectus 5 років тому

    i wish i could type fast like you do

  • @bestformspielt
    @bestformspielt 5 років тому +2

    composition over inheritance! just saying. :)

  • @maheshkotal4214
    @maheshkotal4214 5 років тому

    Hello sir, can you add index. Html page, I need to see the code

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      This workflow video series might help! where I go over all the pieces. ua-cam.com/play/PLRqwX-V7Uu6Zu_uqEA6NqhLzKLACwU74X.html

  • @jochenpanjaer980
    @jochenpanjaer980 5 років тому

    Where is the video about encapsulation in ES6?

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      I think I cover it in this one? ua-cam.com/video/T-HGdc8L-7w/v-deo.html

  • @kikawet
    @kikawet 5 років тому

    What IDE are you using?

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      VSCode, more here: ua-cam.com/play/PLRqwX-V7Uu6Zu_uqEA6NqhLzKLACwU74X.html

  • @poornamith
    @poornamith 5 років тому

    VS Code

  • @lee_sung_studio
    @lee_sung_studio 10 місяців тому

    14:28

  • @lthoedt
    @lthoedt 5 років тому +1

    i have to do it FIRST

  • @tntdogs6910
    @tntdogs6910 4 роки тому

    nice shirt man, where did u buy it?

  • @toastyPredicament
    @toastyPredicament 2 роки тому

    Pls be ok

  • @toastyPredicament
    @toastyPredicament 2 роки тому

    Oh Dan

  • @mvmo4744
    @mvmo4744 5 років тому

    Somehow classes in JavaScript feel wrong to me :(

  • @adamnejm
    @adamnejm 5 років тому

    If you need a nice example here you go. Change classes using SPACE, hold Mouse1 to draw:
    let interval = 0, id = 0, objects = [], classes = [];
    function setup()
    {
    createCanvas(500, 500);
    //frameRate(60);
    }
    function draw()
    {
    background(255);
    objects.forEach(p => {
    p.update();
    p.render();
    });
    if(mouseIsPressed)
    if(!(++interval % 5))
    objects.unshift(new classes[id%3](mouseX, mouseY, 20));
    }
    function keyPressed()
    {
    if(keyCode == 32) id++;
    }
    class Particle
    {
    constructor(x, y, r)
    {
    this.x = x;
    this.y = y;
    this.r = r;
    }
    update()
    {
    this.x += random(-2, 2);
    this.y += random(-2, 2);
    }
    render()
    {
    ellipse(this.x, this.y, this.r);
    }
    }
    classes[0] =
    class Square extends Particle
    {
    constructor(x, y, r)
    {
    super(x, y, r);
    this.t = millis();
    }
    render(){
    let s = sin((millis() - this.t)/100)*10
    rect(this.x, this.y, this.r + s, this.r + s);
    }
    }
    classes[1] =
    class Circle extends Particle
    {
    update()
    {
    super.update();
    this.r = sin(millis()/500) * 10
    }
    render(){
    ellipse(this.x, this.y, this.r);
    }
    }
    classes[2] =
    class Line extends Particle
    {
    update(){
    this.x += 1;
    }
    render(){
    line(this.x, this.y, this.x + this.r, this.y);
    }
    }

  • @sifatmoonjerin2479
    @sifatmoonjerin2479 4 роки тому

    I miss my Bubble... :(

  • @danushkaanurada6936
    @danushkaanurada6936 5 років тому

    What is that editor name..

    • @TheCodingTrain
      @TheCodingTrain  5 років тому

      VSCode! For more: ua-cam.com/play/PLRqwX-V7Uu6Zu_uqEA6NqhLzKLACwU74X.html

  • @ultimade9610
    @ultimade9610 5 років тому

    Third

  • @toastyPredicament
    @toastyPredicament 2 роки тому

    Sleepy pill for dream please

  • @OptimusPrimeagar
    @OptimusPrimeagar 4 роки тому +1

    Can you have more than one inheritance? For instance class Confetti extends particle extends circle ?

    • @kingundfaker
      @kingundfaker 4 роки тому

      He says this at the end. The answer: no , but you can have a child class of a child class.

  • @robotosailr2129
    @robotosailr2129 3 роки тому

    now understand es6 better

  • @benchilcott6908
    @benchilcott6908 5 років тому

    this.boint

  • @wanafnanhariz7650
    @wanafnanhariz7650 3 роки тому

    i really like your videos, i do, but the theme(rainbow, unicorn and stuff) ,is not that i dont like them, its just remind me of weed...and make me wonder why u use that theme... XD

  • @toastyPredicament
    @toastyPredicament 2 роки тому

    Excuse me I'll smoke a cigarette