ES6:超级类不持有状态 [英] ES6: Super class doesn't hold state
本文介绍了ES6:超级类不持有状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试弄清楚这里发生了什么,因为父/超级类在初始构建之后没有数据。
//导入/服务器/a-and-b.js
class A {
constructor(id){
//使MongoDB调用并存储在此变量
// ...
this._LocalVariable = FieldFromMongo;
console.log(`this._LocalVariable:$ {this._LocalVariable}`); // =>这有一个很好的价值,即:'Test'
}
get LocalVar(){
console.log(`this._LocalVariable:$ {this._LocalVariable}`); // =>从子类调用
时返回this._LocalVariable;
}
}
导出类B扩展A {
构造函数(id){
super(id);
this.TEST ='这是一个测试';
}
得到THE_Variable(){
console.log(`super.LocalVar:$ {super.LocalVar}`); // =>当
返回super.LocalVar时,它有一个未定义的值;
}
get GETTHEVAR(){
return this.TEST; // =>这返回'这是一个测试'
}
}
//导入/server/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();
// exports / server / test.js
来自'imports / server / factory.js'的$ {pre>
import {OptsFactory}
const B = OptsFactory.BuildInstances(id,'B');
const THE_Variable = B.THE_Variable; // =>总是未定义
const TEST = B.GETTHEVAR; // =>总是返回'这是一个测试'
为什么A类不保持状态?
解决方案
这是我发现的:
A类{
构造函数(id){
//使MongoDB调用并存储在此变量中
// ...
this._LocalVariable = FieldFromMongo;
}
get LocalVar(){
return this._LocalVariable;
}
GetThatLocalVar(){
return this._LocalVariable;
}
}
导出类B扩展A {
构造函数(id){
super(id);
}
get Style1(){
//引用父取得函数
return super.LocalVar; // =>当
}
get Style2(){
//引用父属性
返回super._LocalVariable; // =>当
}
时,它有一个未定义的值。
get Style3(){
//引用在Parent
中声明的本地属性返回this._LocalVariable; // =>这个工程
}
get Style4(){
//引用父没有getter
返回super.GetThatLocalVar(); // =>这个工程
}
get GETTHEVAR(){
return this.TEST; // =>这返回'这是一个测试'
}
}
所以基本上Style3 Style 4的作品。
I'm trying to figure out what's going on here, as the Parent/Super class does not have data after the initial construction.
// imports/server/a-and-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'
}
}
// imports/server/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();
// imports/server/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'
Why does class A not keeping state?
解决方案
This is what I found:
class A {
constructor(id) {
// make MongoDB call and store inside this variable
// ...
this._LocalVariable = FieldFromMongo;
}
get LocalVar() {
return this._LocalVariable;
}
GetThatLocalVar() {
return this._LocalVariable;
}
}
export class B extends A {
constructor(id) {
super(id);
}
get Style1() {
// Reference to Parent get function
return super.LocalVar; // => This has a undefined value when called
}
get Style2() {
// Reference to Parent property
return super._LocalVariable; // => This has a undefined value when called
}
get Style3() {
// Reference to local Property that is declared in Parent
return this._LocalVariable; // => This works
}
get Style4() {
// Reference to Parent without the getter
return super.GetThatLocalVar(); // => This works
}
get GETTHEVAR() {
return this.TEST; // => This returns 'THIS IS A TEST'
}
}
So basically the thing that works is Style3 Style 4 work.
这篇关于ES6:超级类不持有状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文