ES6: How to access a static getter from an instance

前端 未结 1 1177
萌比男神i
萌比男神i 2020-12-10 11:32

How can i access a static getter from an instance of the class that implements that getter?

for example, i have this class:

class Component {
  stati         


        
相关标签:
1条回答
  • 2020-12-10 12:13

    statics become properties of the constructor function, which you can access on an instance via the constructor property:

    console.log(c.constructor.isComponent);
    

    class Component {
      static get isComponent() { return true; }
    
      constructor() {}
    }
    
    const c = new Component();
    console.log(c.constructor.isComponent); // true

    Of course, that relies on constructor not having been mucked with. :-) Before the class syntax, you'd see people forgetting to set constructor properly in inheritance hierarchies all the time. Thankfully, with class syntax, it's handled automatically so people forgetting is no longer an issue.

    In theory, the instance may have an "own" constructor property, shadowing the one on the prototype. So if that's a concern, you could go to the prototype:

    console.log(Object.getPrototypeOf(c).constructor.isComponent);
    

    class Component {
      static get isComponent() { return true; }
    
      constructor() {}
    }
    
    const c = new Component();
    console.log(Object.getPrototypeOf(c).constructor.isComponent); // true


    Alternatively, if you know what constructor it is, you can go direct to the source:

    console.log(Component.isComponent);
    

    class Component {
      static get isComponent() { return true; }
    
      constructor() {}
    }
    
    // const c = new Component(); <== Don't need it
    console.log(Component.isComponent); // true

    ...but only if you know in advance that Component is the constructor you want.

    0 讨论(0)
提交回复
热议问题