<div dir="ltr">Thanks Allen and Jason! This completely cleared it all up for me!</div><div class="gmail_extra"><br><div class="gmail_quote">On 16 March 2015 at 18:15, Jason Orendorff <span dir="ltr"><<a href="mailto:jason.orendorff@gmail.com" target="_blank">jason.orendorff@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Mar 16, 2015 at 11:53 AM, Allen Wirfs-Brock<br>
<<a href="mailto:allen@wirfs-brock.com">allen@wirfs-brock.com</a>> wrote:<br>
> In ES6, the primary role of the Reflect object is to provide direct access<br>
> to an object's essential internal methods:<br>
> <a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object-internal-methods-and-internal-slots" target="_blank">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object-internal-methods-and-internal-slots</a><br>
<br>
</span>To further elaborate on this: one way this is useful is that the 14<br>
essential internal methods are exactly the operations you can trap<br>
with a custom Proxy. It's useful, when writing a Proxy, to use the<br>
Reflect methods as fallbacks:<br>
<br>
    var alertingProxy = new Proxy(obj, {<br>
        // Proxy: hook into property assignment<br>
        set(t, key, value, receiver) {<br>
            alert(`setting the ${key} property of ${t} to ${value}`);<br>
<br>
            // Reflect: do normal property assignment<br>
            return Reflect.set(t, key, value, receiver);<br>
        }<br>
    });<br>
<br>
-j<br>
</blockquote></div><br></div>