title: Scope within ES6 Classes
body: <p>I understand what is happening in the following snippet, and how to fix (with a binding or by making walk friend a method outside of the constructor), but why is this happening?  It seems counter intuitive to me to have to bind a class' scope to its own methods.</p>
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>class Person {
      constructor(name, friend) {
          this._name = name;
          if(friend) {
            this.walkFriend = friend.walk;
          }
      }
    
      get name() {
          return this._name.toUpperCase();
      }
    
      walk() {
          console.log(this.name + ' is walking.');
      }
  }
           
  let bob = new Person('Bob');
  let bill = new Person('Bill', bob);
  
  console.log(bob.name); // BOB
  console.log(bill.name); // BILL
  bill.walk() // Bill is walking.
  bill.walkFriend(); // We expect 'BOB is walking', but we get 'BILL is walking.'</code></pre>
  </div>
  </div>
  </p>