I stand corrected... this was relaxed in ES5 to only be a keyword in strict mode.
On Thu, Sep 19, 2013 at 9:43 AM, Erik Arvidsson <[email protected]> wrote: > On Thu, Sep 19, 2013 at 9:30 AM, Rick Waldron <[email protected]> wrote: >> On Thu, Sep 19, 2013 at 4:16 AM, Dmitry Soshnikov >> <[email protected]> wrote: >>> >>> Hi, >>> >>> Out of curiosity: we have static methods, but seems there is no yet >>> ability to define a class/static property/constant. >>> >>> class A { >>> const VALUE = 10; >>> } >>> >>> or (probably better to be consistent with static methods): >>> >>> class A { >>> static VALUE = 10; >>> } >>> >> >> There are a few reasons, the first being that there was no "static" prefix >> when maximally minimal classes were accepted, but of course the class >> feature grew a little (which is a good thing). "static", with regard to >> methods, is straight forward, whereas data properties create a potential >> ambiguity: >> >> class A { >> const VALUE = 10; >> } >> >> A decision would have to be made for "const VALUE = 10" here: does it mean >> mean `A.VALUE` and not `var a = new A(); a.VALUE;`? If it means the latter, >> then there are implications that will change a possible future that includes >> "private x = 1" in the same class-body position. >> >> I spoke with Allen off-line and he reminded me that a static "const-like" >> could be created like this: >> >> class A { >> static get VALUE() { return "some constant value"; } >> } >> >> A.VALUE; >> >> (I quoted const-like, because this is still configurable) >> >> >> >>> >>> Was it a special reason or was it just forgotten? (One could define a var >>> in the static scope, but seems it's useful to have the feature inline in the >>> class bodies). >>> >>> P.S.: in addition -- why not to reuse `static` for also simple functions? >>> >>> function getHeavyValue() { >>> static heavyValue; >>> if (!heavyValue) { >>> // heavy calc >>> } >>> return heavyValue; >>> } >>> >> >> This is a no-go because "static" is only reserved in strict mode, which >> means >> >> function foo() { >> static = 1; >> } >> >> (awful, yes—but legal) > > Not true. static is a keyword since ES2. > > 7.4.3, Future keywords > > http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%202nd%20edition,%20August%201998.pdf > > -- > erik -- erik _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

