title: How does property lookups after calling super() in subclass actually work
body: <p>I've a simple example from MDN. </p>
  
  <pre><code>class Animal { 
  
  
   constructor(name) {
      this.name = name;
    }
  
    speak() {
      console.log(this.name + ' makes a noise.');
    }
  }
  
  class Dog extends Animal {
    constructor(name) {
      super(name); // call the super class constructor and pass in the name parameter
    }
  
    speak() {
      console.log(this.name + ' barks.');
    }
  }
  
  let d = new Dog('Mitzie');
  d.speak(); // Mitzie barks.
  </code></pre>
  
  <p>Now, in subclass <code>Dog</code> how does <code>this.name</code> works under the hood. Since <code>this</code> refers to <code>Dog</code> class instance  and name is not something which exists on Dog instance. So to access that we use super call which invokes parent's constructor. I get that it looks up.</p>
  
  <p>But can someone please explain via the prototype mechanism (I'm comfortable in understanding the prototype lookup and chaining mechanism).</p>
  
  <p>I'm sure deep down  it will boil down to that but not clear about intermediate steps in between. Thanks!</p>