<div dir="ltr">Thinking again, this might be a request for static lexical scope variables such that:<div><br></div><div>```js</div><div>function obj() {</div><div>  static value = { test: 42 };</div><div>  return obj.value;</div><div>}</div><div><br></div><div>var a = obj();</div><div>assert(obj() === a);</div><div>```</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 4, 2018 at 4:05 PM Ranando King <<a href="mailto:kingmph@gmail.com">kingmph@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Ok.... maybe I'm thinking a little to literally, but isn't a function already a callable object?<div><br></div><div>```js</div><div>function obj() {</div><div>  return obj.value;</div><div>}</div><div>obj.value = "value";</div><div><br></div><div>assert(obj() === "value");</div><div>```</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 4, 2018 at 1:16 PM Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Edit: the wrapper needs to be a function, so ignore that last email. It's wrong.<br>
<br>
-----<br>
<br>
Isiah Meadows<br>
<a href="mailto:contact@isiahmeadows.com" target="_blank">contact@isiahmeadows.com</a><br>
<a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
<br>
On Tue, Dec 4, 2018 at 2:14 PM Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>> wrote:<br>
><br>
> BTW, there are proxies [1], and one of the proxy hooks is to intercept<br>
> calls [2].<br>
><br>
> [1]: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy" rel="noreferrer" target="_blank">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy</a><br>
> [2]: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply" rel="noreferrer" target="_blank">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply</a><br>
><br>
> Your "callable object" proposal would be literally as simple as this<br>
> to implement:<br>
><br>
> ```js<br>
> const callable = Symbol.for("callable")<br>
> const handler = {<br>
>     apply(target, thisArg, argsList) {<br>
>         return Reflect.apply(target[callable], thisArg, argsList)<br>
>     },<br>
> }<br>
> function makeCallable(obj) { return new Proxy(obj, handler) }<br>
><br>
> // Your example, ported<br>
> const obj = makeCallable({<br>
>     [callable]: function (...args) { return this[Symbol.for('value')] },<br>
>     [Symbol.for(''value')]: 'value',<br>
> })<br>
><br>
> assert(obj() === 'value')<br>
> obj[callable] = () => 1<br>
> assert(obj() === 1)<br>
> ```<br>
><br>
> -----<br>
><br>
> Isiah Meadows<br>
> <a href="mailto:contact@isiahmeadows.com" target="_blank">contact@isiahmeadows.com</a><br>
> <a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
> On Tue, Dec 4, 2018 at 12:02 PM Sultan <<a href="mailto:thysultan@gmail.com" target="_blank">thysultan@gmail.com</a>> wrote:<br>
> ><br>
> > Something along the lines of Symbol.iterator protocol for defining callback objects i.e: Symbol.callable:<br>
> ><br>
> > const obj = {<br>
> >     [Symbol.callable]: function (...args) { return this[Symbol.for('value')] },<br>
> >     [Symbol.for(''value')]: 'value',<br>
> > }<br>
> ><br>
> > assert(obj() === 'value')<br>
> > _______________________________________________<br>
> > es-discuss mailing list<br>
> > <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
> > <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div>