如何从实现该getter的类的实例访问静态getter?
例如,我有这个类:
class Component {
static get isComponent() { return true; }
constructor() {}
}
const c = new Component();
我怎样才能从" c" " isComponent" "组件"类? 我四处读书,所有我发现的都是这样的:
Object.getPrototypeOf(c).isComponent
但这不符合我的情况,因为没有" isComponent" Component原型对象中的方法。如果我像这样编写类,上面的代码可以工作:
Component.prototype.isComponent = () => { return true; }
但这不是我想写课的方式。我错过了什么? TNX
答案 0 :(得分:15)
static
成为构造函数的属性,您可以通过constructor
属性访问实例:
console.log(c.constructor.isComponent);
class Component {
static get isComponent() { return true; }
constructor() {}
}
const c = new Component();
console.log(c.constructor.isComponent); // true

当然,这依赖于constructor
没有陷入困境。 :-)在class
语法之前,您会看到人们忘记在继承层次结构中始终正确设置constructor
。值得庆幸的是,使用class
语法,它会自动处理,因此人们忘记不再是问题。
当然,该实例可能拥有"拥有" constructor
属性,遮蔽原型上的那个。所以,如果这是一个问题,你可以去原型:
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

当然,如果你知道它是什么构造函数,你可以直接去源:
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
&#13;
...但当然,只有事先知道Component
是您想要的构造函数。