Array literal methods invocation and object literal methods invocation difference
<p>In JavaScript, I wonder why I can do this:</p>

<pre><code>[].slice.apply([1,2,3], [0, 2]) // returns [1, 2]
</code></pre>

<p>Which is as far as I understand equivalent of this:</p>

<pre><code>Array.prototype.slice.apply([1,2,3], [0, 2]); // returns [1, 2]
</code></pre>

<p>But I can't do this:</p>

<pre><code>{}.hasOwnProperty.apply(a, ['a']);
</code></pre>

<p>Which would allow to not type this long line:</p>

<pre><code>Object.prototype.hasOwnProperty.apply(a, ['a']); // returns true or false
</code></pre>

<p>Well, while I am at it, I also see that I can actually do all of these:</p>

<pre><code>''.indexOf.apply('asdasd', ['s']); // returns 1
true.toString.apply(true); // returns // "true" as string
</code></pre>

<p>What the deal with {} ? :-) Why is it special?</p>
