<div dir="ltr">Andrea, if class-fields becomes the accepted standard for private then that would work, but it's awfully redundant. A closure is the very definition of "private" in ES. So what does it mean to have a `static #foo` lexically declared? From inside the function, it would be no more private than `var bar`. That would lead to confusion. See the problem?</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 10:02 AM Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@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">I don't think introducing `public` here has any value. We have `static #a = 1` eventually for private already, the default should follow the classes behavior, IMO</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 10:46 PM Ranando King <<a href="mailto:kingmph@gmail.com" target="_blank">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">That's the kind of thing I was shooting for with static lexical scope variables. There's 2 problems with it given the way things are going though. Take a look.<div><br></div><div><font face="monospace, monospace">```js</font></div><div><font face="monospace, monospace">function foo() {</font></div><div><font face="monospace, monospace">  static a=1,</font></div><div><font face="monospace, monospace">         b=2,</font></div><div><font face="monospace, monospace">         c=3;</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace">```</font></div><div>By the way I'm thinking, this would create 3 static variables within foo that are only initialized once and retain whatever value is set on them across invocations. Basically, the object `foo` carries around a closure containing those values. Problem is, this is private to foo. That conflicts with class-fields and it's sigil-means-private model.</div><div><br></div><div>Ignoring that, public static variables can also be done (but it'd be the first ever introduction of `public` in ES.</div><div><div><font face="monospace, monospace">```js</font></div><div><font face="monospace, monospace">function foo() {</font></div><div><font face="monospace, monospace">  static public a=1,</font></div><div><font face="monospace, monospace">                b=2,</font></div><div><font face="monospace, monospace">                c=3;</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace">```</font></div>This would make `foo.a`, `foo.b`, & `foo.c` accessible as public properties of `foo`.</div><div><br></div><div>Think this needs to be a proposal?</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 1:39 AM 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">Personally, I'd prefer something else: a means of a function object literal that's still callable, but I can tack other properties to it easily. Something like this, maybe:<br><br>```js<br>{<br>    (...args) { ... },<br>}<br>```<br><br>In this, the `this` value is set to the callee itself, not the given `this` value.<br><br>Not married to the syntax, but I want the functionality.<br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 01:34 Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@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">> the apply hook needs objects anyway.</div><div dir="ltr"><br></div><div>I meant functions</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 1:33 PM Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@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">I've actually replied to the op, I didn't mean to answer you directly, but the only reason I wrote that is because I could, no other reasons.<div><br></div><div>However, people unaware of the handleEvent pattern for event listeners often hope to be able to pass objects as listeners, ignoring the fact they can do that already (but they need a handleEvent method, own or inherited, in that object).</div><div><br></div><div>There is at least another use case I can't remember now, but I do remember doing the Proxy dance before ending up realizing that the apply hook needs objects anyway.</div><div><br></div><div>But yeah, I don't think it's a must have, specially because we can have something similar already, as shown in my example.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 5, 2018 at 1:25 PM Ranando King <<a href="mailto:kingmph@gmail.com" target="_blank">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">Maybe I asked it wrong. <div><br></div><div>How is making an ordinary object callable at all useful for anything that can't already be easily handled via objects and functions? (looking for use cases here)</div><div>How does this make coding easier to do and understand? (for the AST parser and for the human)</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 4, 2018 at 11:54 PM Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@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">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" target="_blank">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>
_______________________________________________<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>
</blockquote></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>
</blockquote></div>
</blockquote></div>
</blockquote></div>