Why are non-method properties in a prototype an anti-pattern?

Mark S. Miller erights at google.com
Wed Nov 7 09:30:26 PST 2012

On Wed, Nov 7, 2012 at 9:17 AM, Axel Rauschmayer <axel at rauschma.de> wrote:

> In theory, one can use prototype properties to provide default values for
> instance properties. In practice, that is not often useful, because the
> constructor normally creates all instance properties right away, assigning
> default values where necessary. And, with default parameter values in ES6
> that is even easier to do.
> As mentioned by Andrea in another thread, another argument against
> non-method prototype properties is that they prevent you from freezing the
> prototype (because that would make assigning to instance properties
> impossible).

This is due to the override mistake <
and affects methods as well as non-methods, since both are often overridden
by assignment. The unpleasant conclusion is that, since the committee
failed to agree to fix this mistake, the unfortunate generalization of your
conclusion is one of

* "Method and non-method properties in a prototype are an anti-pattern",
which becomes "using prototypal inheritance is JS is an anti-pattern".
* "Overriding by assignment is an anti-pattern", in which case, both method
and non-method inherited properties are fine.

In any case, note that the same kludge <
"fixes" both.

> Any other reasons for why they are discouraged?
> Thanks!
> Axel
> --
> Dr. Axel Rauschmayer
> axel at rauschma.de
> home: rauschma.de
> twitter: twitter.com/rauschma
> blog: 2ality.com
> _______________________________________________
> 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/20121107/fa09139f/attachment.html>

More information about the es-discuss mailing list