Proposal: Tagged Constructor & Taggable Function/Map/Set constructor
# Richard Gibson (7 years ago)
That syntax is already valid, and has a different meaning. new
ctorFactory… first evaluates the tagged template (invoking ctorFactory with
arguments derived from the template literal) and then invokes that result
as a constructor. For example, (new ctorFactoryreturn function Ctor(){}).name equals "Ctor". You could get clever with Reflect.construct
or build an interpreter for using a domain-specific language as input (
example
michaelfig/jessica/blob/8832590eb988a9dfafa0d6ab112c97bacb970ac8/lib/quasi-peg.mjs#L52),
but I don't think there are many other options.
# Sm In (7 years ago)
Thank you for your feedback! I just found that this would be great if it is implemented as library as you suggested. :)
Template literal(includes tagged template) is so strong feature. It makes it possible to add elegant DSL for Library(or maybe framework) which also can interact with js.(styled-component proofed this with their api) Why don't we use them to enhance ECMAScript's API?
If we allow using tagged template to constructors just like this:
new Constructor` blahlah `; // what about to call this syntax as tagged constructor?we can do something like this:
If
Functionconstrucor is taggableconst sum = new Function` (a, b) { return a + b; } `;If
Mapconstructor is taggablenew Map` a: 1234, one: ${() => 1}, str: 'Hello!', bool: true `;If
Setconstructor is taggable. and It supports list comprehensionnew Set` ${range} -> ${x => x * 2} -> ${x => x < 10} `; // Set [2, 4, 6, 8]Feedback is welcome!
Template literal(includes tagged template) is so strong feature. It makes it possible to add elegant DSL for Library(or maybe framework) which also can interact with js.([styled-component proofed this with their api](https://www.styled-components.com/)) Why don't we use them to enhance ECMAScript's API? If we allow using tagged template to constructors just like this: ```js new Constructor` blahlah `; // what about to call this syntax as tagged constructor? ``` we can do something like this: #### If `Function` construcor is taggable ```js const sum = new Function` (a, b) { return a + b; } `; ``` #### If `Map` constructor is taggable ```js new Map` a: 1234, one: ${() => 1}, str: 'Hello!', bool: true `; ``` #### If `Set` constructor is taggable. and It supports list comprehension ```js new Set` ${range} -> ${x => x * 2} -> ${x => x < 10} `; // Set [2, 4, 6, 8] ``` Feedback is welcome! -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20190310/56089a15/attachment.html>