我想弄清楚这里发生了什么,因为父类/超类在初始构建后没有数据。ES6:超级类不保持状态
//进口/服务器/一 - 和 - b.js
class A {
constructor(id) {
// make MongoDB call and store inside this variable
// ...
this._LocalVariable = FieldFromMongo;
console.log(`this._LocalVariable: ${this._LocalVariable}`); // => This has a good value, ie: 'Test'
}
get LocalVar() {
console.log(`this._LocalVariable: ${this._LocalVariable}`); // => This has a undefined value when called from child class
return this._LocalVariable;
}
}
export class B extends A {
constructor(id) {
super(id);
this.TEST = 'THIS IS A TEST';
}
get THE_Variable() {
console.log(`super.LocalVar: ${super.LocalVar}`); // => This has a undefined value when called
return super.LocalVar;
}
get GETTHEVAR() {
return this.TEST; // => This returns 'THIS IS A TEST'
}
}
//进口/服务器/ factory.js
import { B } from 'imports/server/a-and-b.js';
class Factory {
constructor() {
this._factory = new Map();
}
BuildInstances(id, cls) {
let instance = this._factory.get(cls);
if (!instance) {
if (cls === 'B') {
instance = new B(id);
this._factory.set(cls, instance);
return instance;
}
}
else {
return instance;
}
}
}
export let OptsFactory = new Factory();
//进口/服务器/ test.js
import { OptsFactory } from 'imports/server/factory.js'
const B = OptsFactory.BuildInstances(id, 'B');
const THE_Variable = B.THE_Variable; // => always undefined
const TEST = B.GETTHEVAR; // => Always returns 'THIS IS A TEST'
为什么A类不能保持状态?
听起来像你的MongoDB调用是异步的,你期望得到一个同步值。你能否提供一些示例代码来说明你如何从数据库中获得价值? –
这个值实际上是从Mongo返回的,我在console.log中看到它,在上面的代码中,它是这一行:console.log('this._LocalVariable:$ {this._LocalVariable}'); // =>这有一个很好的价值,即:'测试'。只有当我从Child类中调用它时,它才是未定义的 - 就像它从未设置它自己的状态或像Child类没有保留适当的引用一样? – Aaron
真的很难遵循这个问题,特别是使用类似名称的伪代码并且没有真正的实际功能。你不用'super.XXX'来访问实例数据。你使用'this.XXX'。只有一个对象,一个'this'指针和类的所有部分(基类和派生类)都访问相同的对象和相同的'this'指针。因此,无论基类或派生类的哪一部分创建它或设置它,this.XXX都会访问一个属性。 – jfriend00