ES6:超级类不持有状态 [英] ES6: Super class doesn't hold state

查看:129
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆