Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6/Meteor单态模式与遗传_Javascript_Inheritance_Meteor_Ecmascript 6 - Fatal编程技术网

Javascript ES6/Meteor单态模式与遗传

Javascript ES6/Meteor单态模式与遗传,javascript,inheritance,meteor,ecmascript-6,Javascript,Inheritance,Meteor,Ecmascript 6,我已经用这个博客编写了一个单身汉程序: 但我需要一个客户端和服务器端的单例 也就是说,我有三个程序:common.js export class AppsManagerCommon { constructor(options) { // general options this.options = options; // list of registered apps this.apps = []; } registerApp(app) {

我已经用这个博客编写了一个单身汉程序:

但我需要一个客户端和服务器端的单例

也就是说,我有三个程序:
common.js

export class AppsManagerCommon {
  constructor(options) {
    // general options
    this.options = options;
    // list of registered apps
    this.apps = [];
  }
  registerApp(app) {
    a = this.apps.find(function (a) {return a.name === app.name;});
    console.log(a);
    this.apps.push(app);
  }
}
import { AppsManagerCommon } from 'common.js';
let instanceAppsManager = null;  // singleton pattern
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      super(options);
      instanceAppsManager = this;
    }
   return instanceAppsManager;
  }
}
import { AppsManagerCommon } from 'common.js';
let instanceAppsManager = null;  // singleton pattern
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      super(options);
      instanceAppsManager = this;
    }
   return instanceAppsManager;
  }
}
let instanceAppsManager = null;  // singleton pattern
export class AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      instanceAppsManager = this;
      // general options
      this.options = options;
      // list of registered apps
      this.apps = [];
    }
    return instanceAppsManager;
  }
  registerApp(app) {
    this.apps.push(app);
  }
}
import { AppCommon, AppsManagerCommon } from 'common.js';
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
      super(options);
  }
}
client.js

export class AppsManagerCommon {
  constructor(options) {
    // general options
    this.options = options;
    // list of registered apps
    this.apps = [];
  }
  registerApp(app) {
    a = this.apps.find(function (a) {return a.name === app.name;});
    console.log(a);
    this.apps.push(app);
  }
}
import { AppsManagerCommon } from 'common.js';
let instanceAppsManager = null;  // singleton pattern
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      super(options);
      instanceAppsManager = this;
    }
   return instanceAppsManager;
  }
}
import { AppsManagerCommon } from 'common.js';
let instanceAppsManager = null;  // singleton pattern
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      super(options);
      instanceAppsManager = this;
    }
   return instanceAppsManager;
  }
}
let instanceAppsManager = null;  // singleton pattern
export class AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      instanceAppsManager = this;
      // general options
      this.options = options;
      // list of registered apps
      this.apps = [];
    }
    return instanceAppsManager;
  }
  registerApp(app) {
    this.apps.push(app);
  }
}
import { AppCommon, AppsManagerCommon } from 'common.js';
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
      super(options);
  }
}
server.js
(与
client.js
相同)

singletoc可成功用于:

a = new AppsManager();
a.registerApp({name:'app1'});
但只要我这么做

b = new AppsManager(); // should be the same instance
我得到一个错误:

ReferenceError: this hasn't been initialised - super() hasn't been called
    at BabelRuntime.possibleConstructorReturn (packages/babel-runtime.js:206:13)
我或多或少能理解错误的含义,但我不知道如何解决问题

编辑1


注意:注册表应用中的存在性检查不起作用,但目前不是问题。这是一个有效的解决方案:

common.js

export class AppsManagerCommon {
  constructor(options) {
    // general options
    this.options = options;
    // list of registered apps
    this.apps = [];
  }
  registerApp(app) {
    a = this.apps.find(function (a) {return a.name === app.name;});
    console.log(a);
    this.apps.push(app);
  }
}
import { AppsManagerCommon } from 'common.js';
let instanceAppsManager = null;  // singleton pattern
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      super(options);
      instanceAppsManager = this;
    }
   return instanceAppsManager;
  }
}
import { AppsManagerCommon } from 'common.js';
let instanceAppsManager = null;  // singleton pattern
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      super(options);
      instanceAppsManager = this;
    }
   return instanceAppsManager;
  }
}
let instanceAppsManager = null;  // singleton pattern
export class AppsManagerCommon {
  constructor(options) {
    if (!instanceAppsManager) {  // not yet instantiated
      instanceAppsManager = this;
      // general options
      this.options = options;
      // list of registered apps
      this.apps = [];
    }
    return instanceAppsManager;
  }
  registerApp(app) {
    this.apps.push(app);
  }
}
import { AppCommon, AppsManagerCommon } from 'common.js';
export class AppsManager extends AppsManagerCommon {
  constructor(options) {
      super(options);
  }
}
server.js
(与
client.js
相同)