Gio*_*uno 16 javascript getter static class ecmascript-6
如何从实现该getter的类的实例访问静态getter?
例如,我有这个类:
class Component {
static get isComponent() { return true; }
constructor() {}
}
const c = new Component();
Run Code Online (Sandbox Code Playgroud)
我如何从"组件"类的"c""isComponent"调用?我四处读书,我发现的就是这样的:
Object.getPrototypeOf(c).isComponent
Run Code Online (Sandbox Code Playgroud)
但这不适用于我的情况,因为Component原型对象中没有"isComponent"方法.如果我像这样编写类,上面的代码可以工作:
Component.prototype.isComponent = () => { return true; }
Run Code Online (Sandbox Code Playgroud)
但这不是我想写课的方式.我错过了什么?TNX
T.J*_*der 17
statics成为构造函数的属性,您可以通过constructor属性访问实例:
console.log(c.constructor.isComponent);
Run Code Online (Sandbox Code Playgroud)
class Component {
static get isComponent() { return true; }
constructor() {}
}
const c = new Component();
console.log(c.constructor.isComponent); // trueRun Code Online (Sandbox Code Playgroud)
当然,这依赖于constructor没有陷入困境.:-)在class语法之前,你会发现人们忘记constructor在继承层次结构中忘记设置.值得庆幸的是,使用class语法,它会自动处理,因此人们忘记不再是一个问题.
当然,实例可能具有"自己的" constructor属性,遮蔽原型上的属性.所以,如果这是一个问题,你可以去原型:
console.log(Object.getPrototypeOf(c).constructor.isComponent);
Run Code Online (Sandbox Code Playgroud)
class Component {
static get isComponent() { return true; }
constructor() {}
}
const c = new Component();
console.log(Object.getPrototypeOf(c).constructor.isComponent); // trueRun Code Online (Sandbox Code Playgroud)
当然,如果你知道它是什么构造函数,你可以直接去源:
console.log(Component.isComponent);
Run Code Online (Sandbox Code Playgroud)
class Component {
static get isComponent() { return true; }
constructor() {}
}
// const c = new Component(); <== Don't need it
console.log(Component.isComponent); // trueRun Code Online (Sandbox Code Playgroud)
...但当然,只有事先知道这Component是你想要的构造函数.
| 归档时间: |
|
| 查看次数: |
9037 次 |
| 最近记录: |