Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Let's say I have two ES6 classes like this:

class Base {
    static something() {
        console.log(this);
    }
}

class Derived extends Base {
}

And then I make a call like this:

Derived.something();

Note that I am making a call to a static method defined on the super class via sub class.

This does not give me errors. It prints

[Function: Derived]

So accessing this within a static method seems to work here.

I need a common static method for all sub-classes of a super class and I need to be able to know what sub-class is calling this method.

Now my question is whether using this within a static method is legal. I know these static methods become class methods, and hence this would naturally point to the class object they are called on. (The class object being the constructor.)

But I can't seem to find any definitive resource that states that this is allowed by the ES specification.

This looks like a good introduction to ES6 classes but does not talk about this with static.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
205 views
Welcome To Ask or Share your Answers For Others

1 Answer

Under typical circumstances, the this in any call to something.method() will refer to something as long as the function is not an arrow function, bound function, or something like that (and it is neither of those in this case).

Class inheritance, or even ES6, aren't really relevant here. All you need to know is that you are calling Derived.something(), so this will refer to Derived.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...