BTW, another reason I want that kind of "function literal" is because
I deliberately want to not just expose a function, but expose one
*with properties*, as part of a public API.

-----

Isiah Meadows
[email protected]
www.isiahmeadows.com

On Wed, Dec 5, 2018 at 12:27 PM Ranando King <[email protected]> wrote:
>
> 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

Reply via email to