"Subclassing" basic types in DOM - best method?

Rick Waldron waldron.rick at gmail.com
Tue Nov 20 13:31:47 PST 2012


On Tue, Nov 20, 2012 at 2:45 PM, Tab Atkins Jr. <jackalmage at gmail.com>wrote:

> On Mon, Nov 19, 2012 at 9:46 PM, Brendan Eich <brendan at mozilla.com> wrote:
> > Tab Atkins Jr. wrote:
> >> If we did this, the only reason to continue subclassing Map is to get
> >> instanceof checks to work.  Is this acceptable?
> >
> > I think it's either irrelevant (no one tests 'aUrlQuery instanceof Map')
> or else a potential problem (cross-frame instanceof).
>
> People *do* perform those checks, though.  For example, in a method
> that accepts either an array or other things, a quick "foo instanceof
> Array" check is a clear, easy way to check what you've got.


Be careful there, it's incredibly rare to see code that does that—which is
why Array.isArray was created and is generally shimmed with some version of
({}).toString.call(arg).slice(8, -1) === "Array"... instanceof is generally
viewed (whether correctly or not) as "broken".



> It suffers
> from cross-frame issues, but shrug.  Similar checks will proliferate
> as people write methods that take generic Maps.
>

For the same reason as previously stated, I predict that popular libraries
will simply add "isMap" to their offerings and the implementation will look
similar to the pattern I showed earlier.


>
> (On the other hand, they might instead just feature-test for the
> existence of items(), and then use it as an iterable, in which case
> this would be a non-issue.  Depends on the use-case, I suppose.)
>


Probably not since that will result in a lot of false positives when:

let o = { items: function() {} };

would pass that test.



Rick






>
>
> > Where I would like to go, if you force me to pick a promising path:
> >
> > http://disnetdev.com/contracts.coffee/#duck
> >
> http://disnetdev.com/blog/2011/09/05/Duck-Typing-Invariants-In-contracts.coffee/
>
> That's my preferred direction, too, but I suspect that's far off.  It
> doesn't even have a strawman yet, does it?
>
> ~TJ
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121120/7d850af2/attachment-0001.html>


More information about the es-discuss mailing list