<div dir="ltr">Hi Igor<div><br></div><div>With `super()` and closure binding of the anonymous class `constructor` (as with all class methods) you can basically solve your problem of constructor arguments appearing in the wrong place:<br><br>```<div><span style="font-size:12.8px">this.add(</span></div><div><span style="font-size:12.8px">    new class extends ArrayView {</span></div><div>        constructor() { super(<span style="font-size:12.8px">"items", itemsModel</span>); }</div><div><span style="font-size:12.8px">        populateItem(item) {</span><br style="font-size:12.8px"><span style="font-size:12.8px">            item.add(new Checkbox("check", new PropertyModel(item.model, "done")));</span><br style="font-size:12.8px"><span style="font-size:12.8px">            item.add(new Label("title", new PropertyModel(item.model, "title")));</span><br style="font-size:12.8px"><span style="font-size:12.8px">        }</span><br style="font-size:12.8px"><span style="font-size:12.8px">    }</span><br style="font-size:12.8px"><span style="font-size:12.8px">);</span><br><div>```</div></div><div><br></div><div>I concede that spelling `constructor`, `super`, and the various soup of punctuation is a little less than ideal, but at the end of the day I think this is quite reasonable, don't you?</div></div><div><br></div><div>Cheers</div><div><br></div><div>Alex</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 6 January 2017 at 22:11, Igor Vaynberg <span dir="ltr"><<a href="mailto:igor.vaynberg@gmail.com" target="_blank">igor.vaynberg@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Given a simple class with an abstract method "populateItem"<br>
<br>
class ArrayView extends Container {<br>
    constructor(id, model) {<br>
        super(id);<br>
        this.model = model;<br>
    }<br>
<br>
    // methods referencing "populateItem" omitted for clarity<br>
}<br>
<br>
the current anonymous instantiation syntax looks like this:<br>
<br>
this.add(new class extends ArrayView {<br>
    populateItem(item) {<br>
        item.add(new Checkbox("check", new PropertyModel(item.model, "done")));<br>
        item.add(new Label("title", new PropertyModel(item.model, "title")));<br>
    }<br>
}<br>
("items", itemsModel)<br>
);<br>
<br>
The problem with this syntax is that it pushes the constructor<br>
parameters below the class body which I think causes two problems:<br>
<br>
When scanning code constructors often contain the piece of information<br>
that helps locate the anonymous class, which currently requires the<br>
developer to look back. This is especially problematic for anonymous<br>
classes with long class bodies.<br>
<br>
When writing code I usually think about the constructor first, so it<br>
seems it would be preferable to write it before moving onto working on<br>
the class body. This is also the reason why constructors are usually<br>
placed toward the top of named classes' source.<br>
<br>
A better syntax would move the constructor parameters between the<br>
super class name and the class body:<br>
<br>
this.add(new class extends ArrayView("items", itemsModel) {<br>
    populateItem(item) {<br>
        item.add(new Checkbox("check", new PropertyModel(item.model, "done")));<br>
        item.add(new Label("title", new PropertyModel(item.model, "title")));<br>
    }<br>
});<br>
<br>
If possible it would also be great to get rid of the "class extends"<br>
keywords for this usecase:<br>
<br>
this.add(new ArrayView("items", itemsModel) {<br>
    populateItem(item) {<br>
        item.add(new Checkbox("check", new PropertyModel(item.model, "done")));<br>
        item.add(new Label("title", new PropertyModel(item.model, "title")));<br>
    }<br>
});<br>
<br>
Thoughts?<br>
<br>
<br>
Thanks,<br>
-igor<br>
______________________________<wbr>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
</blockquote></div><br></div>