ES6: How to access a static getter from an instance

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 17:35:25

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.

Of course, 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

Of course, 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 of course, only if you know in advance that Component is the constructor you want.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!