<div dir="ltr"><div dir="ltr">How about this:<div><br></div><div>```js</div><div><br></div><div><div>// the poly</div><div>if (!Symbol.callable)</div><div>  Symbol.callable = Symbol('callable');</div><div><br></div><div>// the setup</div><div>class Callable extends Function {</div><div>  constructor(object) {</div><div>    super('return arguments.callee[Symbol.callable](...arguments)');</div><div>    //            sloppy mode FTW!</div><div>    Object.setPrototypeOf(this, object);</div><div>  }</div><div>}</div><div><br></div><div><br></div><div>// the example</div><div>const obj = new Callable({</div><div>  [Symbol.callable](value) {</div><div>    return value + this.value;</div><div>  },</div><div>  value: 123</div><div>});</div><div><br></div><div>obj(7); // 130</div></div><div><br></div><div><br></div><div>```</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 12:02 AM Sultan <<a href="mailto:thysultan@gmail.com">thysultan@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"><div dir="ltr">Something along the lines of Symbol.iterator protocol for defining callback objects i.e: Symbol.callable:<br><br>const obj = {</div><div dir="ltr">    [Symbol.callable]: function (...args) { return this[Symbol.for('value')] },</div><div dir="ltr">    [Symbol.for(''value')]: 'value', <br>}</div><div dir="ltr"><br></div><div>assert(obj() === 'value')</div></div>
_______________________________________________<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>