title: How does instanceof work in JavaScript?
body: <p>In the following code sample both checks of obj2 and obj3 at the end with <em>instanceof</em> return true even if the ways there were constructed are different and the results of returning <em>name</em> property are different.</p>
  
  <pre><code>var Obj1 = function() {
      this.name = "foo1";
  };
  Obj1.prototype.name = "foo1onProt";
  var obj1 = new Obj1();
  
  var Obj2 = function() {};
  Obj2.prototype = new Obj1();
  Obj2.prototype.constructor = Obj2;
  var obj2 = new Obj2();
  
  var Obj3 = function() {};
  Obj3.prototype = Object.create(Obj1.prototype);
  Obj3.prototype.constructor = Obj3;
  var obj3 = new Obj3();
  
  console.dir(obj1);
  console.log("obj1.name: " + obj1.name);
  
  console.dir(obj2);
  console.log("obj2.name: " + obj2.name);
  
  console.dir(obj3);
  console.log("obj3.name: " + obj3.name);
  
  console.log("obj2 instanceof Obj1: " + (obj2 instanceof Obj1));
  console.log("obj3 instanceof Obj1: " + (obj3 instanceof Obj1));
  </code></pre>
  
  <p>Result of the run in Chrome:</p>
  
  <pre><code>Obj1
    name: "foo1"
    __proto__: Object
      constructor: function () {
      name: "foo1onProt"
      __proto__: Object
  obj1.name: foo1
  Obj2
    __proto__: Obj1
      constructor: function () {}
      name: "foo1"
      __proto__: Object
        constructor: function () {
        name: "foo1onProt"
        __proto__: Object
  obj2.name: foo1
  Obj3
     __proto__: Object
     constructor: function () {}
     __proto__: Object
       constructor: function () {
       name: "foo1onProt"
       __proto__: Object
  obj3.name: foo1onProt
  
  obj2 instanceof Obj1: true
  obj3 instanceof Obj1: true
  </code></pre>
  
  <p>What is the best way to recognize that <em>obj2</em> and <em>obj3</em> are different?
  How does actually <em>instanceof</em> work?</p>