如何从实现该 getter 的类的实例访问静态 getter?
例如,我有这门课:
class Component {
static get isComponent() { return true; }
constructor() {}
}
const c = new Component();
如何从“Component”类的“c”“isComponent”调用? 我四处阅读,发现的都是类似的东西:
Object.getPrototypeOf(c).isComponent
但这对我的情况不起作用,因为组件原型对象中没有“isComponent”方法。如果我像这样编写类,上面的代码就可以工作:
Component.prototype.isComponent = () => { return true; }
但这不是我想要编写课程的方式。我缺少什么? tnx
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
是您想要的构造函数。
Component
所以不要在实例上调用它,而是在类本身上调用它。这听起来很合乎逻辑,因为静态变量没有 this 变量。静态有一个对于类的所有实例都相同的字段变量。
示例是计数器。在您的类上声明一个静态计数器字段变量,并在您的类的实例中更新此计数器,并注意此变量将递增。