What do call() and apply() actually do to fool methods into working on array-like objects
<p>There's a lot of information out there of differences between call, apply and, bind but I'm struggling to find info on how exactly the call and apply methods fool existing functions—normally accepting arrays—into accepting array-like objects.</p>

<p>To my understanding, the full reference to such a method is an instruction on where to find the method.
The call/apply methods then change the 'this' param to point to the array-like object.</p>

<p>I've searched round for JS source code to no avail.</p>

<p>In Math.max.apply(Math,arguements), if part of the reason we can repurpose a function expecting an array to instead work on an array-like object is due to updating the 'this' param, how does it make sense to just give Math as it's context.</p>

<p>What is special about call and apply that tricks methods into working on array-like objects??</p>

<pre><code>&lt;script type="text/javascript"&gt;
function multiMax(multi){
    return multi  * Math.max.apply(Math,
        Array.prototype.slice.call(arguments,1));
}
assert(multiMax(3, 1, 2, 3) == 9, "3*3=9 (First arg, by  largest.)");
&lt;/script&gt;
</code></pre>