<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">2015-11-02 23:34 GMT+01:00 Coroutines <span dir="ltr"><<a href="mailto:coroutines@gmail.com" target="_blank">coroutines@gmail.com</a>></span>:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I come from Lua.  In Lua we make proxy objects with metamethods.  You<br>
create an empty table/object and define a metatable with a __index and<br>
__newindex to catch accesses and changes when a key/property doesn't<br>
exist.  I would primarily use this in sandboxes where I wanted to<br>
track the exact series of operations a user was performing to modify<br>
their environment (the one I'd stuck them in).</blockquote><div><br></div><div>For this type of use case, you can use an ES6 Proxy <<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy">https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy</a>>. You can think of the proxy handler's methods as the 'metamethods' of the proxy object.</div><div><br></div><div>What O.o would provide beyond Proxy is the ability to observe changes to already pre-existing objects. However, since you mention you'd start with an empty table/object, you should be able to create a fresh Proxy and use that to trace all property accesses.</div><div><br></div><div>Proxies are particularly well-suited when you want to sandbox things, since you should be in control of the sandboxed environment anyway and can set-up proxies to intermediate. O.o is particularly well-suited to scenarios where there are already plenty of pre-existing objects and you don't know ahead of time which ones to observe and which not.</div><div><br></div><div>Cheers,</div><div>Tom</div></div></div></div>