Anyone have ideas on more examples? It’s tempting to make a transpiler
plugin to see how it works in practice, but I’d like to see more examples
first. Thanks

On Sat, Apr 25, 2020 at 1:12 PM Jacob Bloom <[email protected]>
wrote:

> Maybe it would be less footgunny to support autovivification in a more
> class-based way, like Python does?
>
> ```javascript
> class AutoVivArray extends Array {
>   [Symbol.getMissing](identifier) {
>     /* if we're here, identifier is not an ownProperty
>      * and is nowhere on the prototype chain */
>     this[identifier] = new Whatever();
>     return this[identifier];
>   }
> }
> ```
>
> Though I can't see how that's much more useful than Proxies besides saving
> you a little boilerplate
>
> On Fri, Apr 24, 2020 at 3:23 PM Thomas Shinnick <[email protected]>
> wrote:
>
>> You are describing Perl's autovivification feature. Also possible (in
>> that syntax) for arrays and mixed object/array chains. I liked it, but many
>> saw it as a footgun. There was even a compile time module to turn off the
>> feature, if the coder wanted more caution. Having mentioned Perl I will
>> assume this is DOA?
>>
>> On Fri, Apr 24, 2020, 14:36 Tobias Buschor <[email protected]>
>> wrote:
>>
>>> Since we now have the "Optional Chaninig Operator" , perhaps a "Forced
>>> Chaining Operator" would also be worth considering.
>>> I, personally, could use it:
>>>
>>>     let table;
>>>     table!.user!.id!.type = 'int'
>>>
>>> will evaluate to:
>>>
>>>     let table;
>>>     if ( ! ( table instanceOf Object) ) table = {};
>>>     if ( ! ( table.user instanceOf Object) ) table.user = {};
>>>     if ( ! ( table.user.id instanceOf Object) ) table.user.id = {};
>>>     table.user.id.type = 'int';
>>>
>>> Also to be noted:
>>> Sometimes a fallback to `Object.create(null)` or something other might
>>> be desirable.
>>> But since `{}` is syntactical sugar for
>>> `Object.create(Object.prototype)`, this would be consistent.
>>>
>>> _______________________________________________
>>> 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