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?
On Wed, Dec 5, 2018 at 10:02 AM Andrea Giammarchi < [email protected]> wrote: > 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 > > On Wed, Dec 5, 2018 at 10:46 PM Ranando King <[email protected]> wrote: > >> 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. >> >> ```js >> function foo() { >> static a=1, >> b=2, >> c=3; >> } >> ``` >> 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. >> >> Ignoring that, public static variables can also be done (but it'd be the >> first ever introduction of `public` in ES. >> ```js >> function foo() { >> static public a=1, >> b=2, >> c=3; >> } >> ``` >> This would make `foo.a`, `foo.b`, & `foo.c` accessible as public >> properties of `foo`. >> >> Think this needs to be a proposal? >> >> >> On Wed, Dec 5, 2018 at 1:39 AM Isiah Meadows <[email protected]> >> wrote: >> >>> 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: >>> >>> ```js >>> { >>> (...args) { ... }, >>> } >>> ``` >>> >>> In this, the `this` value is set to the callee itself, not the given >>> `this` value. >>> >>> Not married to the syntax, but I want the functionality. >>> On Wed, Dec 5, 2018 at 01:34 Andrea Giammarchi < >>> [email protected]> wrote: >>> >>>> > the apply hook needs objects anyway. >>>> >>>> I meant functions >>>> >>>> On Wed, Dec 5, 2018 at 1:33 PM Andrea Giammarchi < >>>> [email protected]> wrote: >>>> >>>>> 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. >>>>> >>>>> 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). >>>>> >>>>> 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. >>>>> >>>>> But yeah, I don't think it's a must have, specially because we can >>>>> have something similar already, as shown in my example. >>>>> >>>>> >>>>> On Wed, Dec 5, 2018 at 1:25 PM Ranando King <[email protected]> wrote: >>>>> >>>>>> Maybe I asked it wrong. >>>>>> >>>>>> 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) >>>>>> How does this make coding easier to do and understand? (for the AST >>>>>> parser and for the human) >>>>>> >>>>>> On Tue, Dec 4, 2018 at 11:54 PM Andrea Giammarchi < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> How about this: >>>>>>> >>>>>>> ```js >>>>>>> >>>>>>> // the poly >>>>>>> if (!Symbol.callable) >>>>>>> Symbol.callable = Symbol('callable'); >>>>>>> >>>>>>> // the setup >>>>>>> class Callable extends Function { >>>>>>> constructor(object) { >>>>>>> super('return arguments.callee[Symbol.callable](...arguments)'); >>>>>>> // sloppy mode FTW! >>>>>>> Object.setPrototypeOf(this, object); >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> >>>>>>> // the example >>>>>>> const obj = new Callable({ >>>>>>> [Symbol.callable](value) { >>>>>>> return value + this.value; >>>>>>> }, >>>>>>> value: 123 >>>>>>> }); >>>>>>> >>>>>>> obj(7); // 130 >>>>>>> >>>>>>> >>>>>>> ``` >>>>>>> >>>>>>> On Wed, Dec 5, 2018 at 12:02 AM Sultan <[email protected]> wrote: >>>>>>> >>>>>>>> Something along the lines of Symbol.iterator protocol for defining >>>>>>>> callback objects i.e: Symbol.callable: >>>>>>>> >>>>>>>> const obj = { >>>>>>>> [Symbol.callable]: function (...args) { return >>>>>>>> this[Symbol.for('value')] }, >>>>>>>> [Symbol.for(''value')]: 'value', >>>>>>>> } >>>>>>>> >>>>>>>> assert(obj() === 'value') >>>>>>>> _______________________________________________ >>>>>>>> es-discuss mailing list >>>>>>>> [email protected] >>>>>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> es-discuss mailing list >>>>>>> [email protected] >>>>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>>>> >>>>>> _______________________________________________ >>>> es-discuss mailing list >>>> [email protected] >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> >>>
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

