static/class properties

Erik Arvidsson erik.arvidsson at gmail.com
Thu Sep 19 07:10:03 PDT 2013


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
<erik.arvidsson at gmail.com> wrote:
> On Thu, Sep 19, 2013 at 9:30 AM, Rick Waldron <waldron.rick at gmail.com> wrote:
>> On Thu, Sep 19, 2013 at 4:16 AM, Dmitry Soshnikov
>> <dmitry.soshnikov at gmail.com> 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


More information about the es-discuss mailing list