Define static properties and prototype properties with the class syntax

Glen Huang curvedmark at gmail.com
Sat Dec 13 02:35:19 PST 2014


Thanks for the sample code.

But the defaults actually contains other properties like width, height, etc that let users customize the constructed menu object. So subclass won’t work here.

A lot jquery plugin are actually written this way:

http://learn.jquery.com/plugins/advanced-plugin-concepts/

Look at the first example, A defaults property is attatched to the constructor.

> On Dec 13, 2014, at 6:20 PM, Frankie Bagnardi <f.bagnardi at gmail.com> wrote:
> 
> You're much better off subclassing menu for that purpose.
> 
> class Menu
>     constructor(options) {
>         this.options = Object.assign({hidden: false}, options);
>     }
> }
> 
> class HiddenMenu extends Menu {
>     constructor(options){
>         super(Object.assign({hidden: true}, options));
>     }
> }
> 
> 
> On Sat, Dec 13, 2014 at 2:54 AM, Glen Huang <curvedmark at gmail.com <mailto:curvedmark at gmail.com>> wrote:
> But allowing getter & setter already makes it dangerous:
> 
> let _bar = {}
> class Foo {
>         static get bar() { return _bar; }
> }
> 
> Objects that have Foo.prototype in the prototype chain can do "this.bar.a = 1", and the change won’t be shadowed.
> 
> I found myself looking for a way to define static properties because I want to do this:
> 
> function Menu(options) {
>         this.options = Object.assign({}, Menu.defaults, options);
> }
> Menu.defaults = { hidden: false };
> 
> I want to expose the defaults property so it can be modified by users. This pattern is very ubiquitous in es5. I wonder if the class syntax could allow this pattern to be carried to es6?
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20141213/63b445b1/attachment.html>


More information about the es-discuss mailing list