- From: Scott Miles <sjmiles@google.com>
- Date: Fri, 8 Mar 2013 15:11:59 -0800
- To: Erik Arvidsson <arv@chromium.org>
- Cc: Dimitri Glazkov <dglazkov@chromium.org>, public-webapps <public-webapps@w3.org>
- Message-ID: <CAHbmOLZbg7Ha=VGWLMas=QH2vjXtEqSKPax16x-gN-XAfFH7Gw@mail.gmail.com>
Steve Orvell suggested that one could do <element name='x-fancier' extends="x-fancy"> <script> class XFancier extends this.extendee { fancify() { super(); makeFancier(); } } this.register(XFancier); As long as Element calculates 'extendee' and the registration system can deal with the full prototype. It's clever, but not particularly satisfying. S On Fri, Mar 8, 2013 at 2:16 PM, Scott Miles <sjmiles@google.com> wrote: > In a polyfill, it's easy to make them parallel, but I don't know how to do > that with ES6. > > XFancier = Polyfill.Class(XFancy, prototype); > document.register('x-fancier', XFancier); > > and > > <element name="XFancier" extends="x-fancy"> > <template> more resources here </template> > <script>Polyfill.register(this, prototype);</script> > </element> > > I'm assuming use of 'super' in ES6 and some [lesser] form of that > supported by Polyfill. > > > On Fri, Mar 8, 2013 at 2:09 PM, Scott Miles <sjmiles@google.com> wrote: > >> >> inline >> >> On Fri, Mar 8, 2013 at 2:02 PM, Erik Arvidsson <arv@chromium.org> wrote: >> >>> Allowing the same information in 2 places is problematic. We could allow >>> it but then we need to throw if they diverge. >>> >> >> Yes, and it's also just plain annoying to have these variations IMO. >> >> >>> >>> To back up, the following example is incomplete: >>> >>> <element name='x-fancier' extends="x-fancy"> >>> <script> >>> class XFancier extends XFancy { >>> fancify() { >>> super(); // How do I get inherited fancify? >>> makeFancier(); >>> } >>> } >>> >> >> Yes, sorry, there has to be a registration step here, I've been doing >> this: >> >> this.register(XFancier); >> >> >>> </script> >>> </element> >>> >>> because no one is associating XFancier with x-fancier. >>> >>> >>> On Fri, Mar 8, 2013 at 4:13 PM, Scott Miles <sjmiles@google.com> wrote: >>> >>>> But now XFancier carries a complete prototype, and there is no >>>> 'extends' attribute, which is where I came in. This is my 'option 1'. >>>> >>>> Are you suggesting this should be optional? This is why I wanted to >>>> bring it up. >>>> >>>> Scott >>>> >>>> >>>> On Fri, Mar 8, 2013 at 1:03 PM, Erik Arvidsson <arv@chromium.org>wrote: >>>> >>>>> Inline... >>>>> >>>>> On Fri, Mar 8, 2013 at 3:33 PM, Scott Miles <sjmiles@google.com>wrote: >>>>> >>>>>> imperative: >>>>>> >>>>>> class XFancier extends XFancy { >>>>>> fancify() { >>>>>> super(); >>>>>> makeFancier(); >>>>>> } >>>>>> ... >>>>>> document.register('x-fancier', XFancier); >>>>>> >>>>>> declarative: >>>>>> >>>>>> <element name='x-fancier' extends="x-fancy"> >>>>>> <script> >>>>>> class XFancier { >>>>>> fancify() { >>>>>> super(); // How do I get inherited fancify? >>>>>> >>>>> >>>>> Yeah, this will not work. super is statically bound. >>>>> >>>>> Of course we could dynamically rebind super but not having an extends >>>>> clause is really confusing. >>>>> >>>>> Why can't we just do? >>>>> >>>>> <element name="x-fancier"> >>>>> <script> >>>>> class XFancier extends XFancy { >>>>> ... >>>>> } >>>>> </script> >>>>> </element> >>>>> >>>>> -- >>>>> erik >>>>> >>>>> >>>>> >>>> >>> >>> >>> -- >>> erik >>> >>> >>> >> >
Received on Friday, 8 March 2013 23:12:35 UTC