title: What is "Uncaught TypeError: Illegal invocation” in Chrome?
body: <p>I have a question.Imagine that we have such html document:</p>
  
  <pre><code>&lt;html&gt;
    &lt;head&gt;
    &lt;/head&gt;
    &lt;body&gt;
      &lt;p id="1"&gt;Hi&lt;/p&gt;
    &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>When I am writing <code>document.getElementById("1").__proto__;</code> - I have got the HTMLParagraphElement object. It is the first prototype object in the chain (HTMLParagraphElement--> HTMLElement --> Element--> Node-->...) of the p object prototypes. As the Node object is laying in this chain so all its properties and methods are available for the HTMLParagraphElement object. And when I am writing <code>document.getElementById("1").__proto__.parentNode;</code> a browser gives me </p>
  
  <p><strong>Uncaught TypeError: Illegal invocation</strong>.
  What does it mean? And how can I know where exactly this HTMLParagraphElement object is connected to the BOM? For example, if I am writing var x=10; - it is an object and it is connected to the root of the window object (window.x;). I want to have a clear understanding of the structure of the BOM.</p>