title: .prototype and [[prototype]]. Why is .prototype an empty object?
body: <p>I am actually very confused with prototypes right now despite reading most articles on StackOverflow.</p>
  
  <pre class="lang-js prettyprint-override"><code>function Foo() {
  
  }
  
  Foo.prototype.speak = function() {
      console.log('Foo');
  };
  
  function Bar() {
  
  }
  
  console.log(Bar.prototype); // {}
  
  Bar.prototype = Object.create(Foo.prototype);
  
  console.log(Bar.prototype); // {} ----- (1)
  
  Bar.prototype.speak = function() {  // ----------(2)
      console.log('Bar');
  };   
  
  console.log(Bar.prototype); // { speak: [Function] }  ----- (3)
  </code></pre>
  
  <p>Question:</p>
  
  <p>1) Why is <strong>(1)</strong> an empty object after <code>Object.create</code>. Shouldn't it turn an object with a <code>speak method</code> from <code>Foo</code> ?</p>
  
  <p>2) What am I actually changing on <strong>(2)</strong> ?? The <code>Bar</code> object or the <code>prototype</code> object ? What is actually happening?</p>
  
  <p>3) What's happening on <strong>(3)</strong>.</p>
  
  <p>4) How is [[prototype]] involved in all of this? What I do know is [[prototype]] is used for look ups if the current object does not contain a property.</p>
  
  <p>Just to be sure, <code>.prototype !== [[prototype]]</code> but <code>[[prototype]] === __proto__</code> ?</p>
  
  <p><strong>Sorry if this is a duplicate. Because I can't seem to answer those questions despite multiple similar questions.</strong></p>