【问题标题】:Access class inside function函数内部的访问类
【发布时间】:2017-05-30 07:14:16
【问题描述】:

我有一个包含 es6 类的 ready() 函数。 我想在函数之外实例化这个类,但是我没有成功地使它工作。

我不想使用返回函数,因为该函数可以有多个类。

这是我想做的一个例子:

function ready(api) {
    class A extends api.C {
        contructor() {
            this.foo = "bar";
        }
    }

    class B extends A {
        contructor() {
            this.bar = "foo";
        }
    }
}

let classA = ready.A; // Here is the problem : I would like to access to the class prototype

原因是我的应用程序有一些使用remi npm 包的插件,我想导出所有插件之间共享的类。 不知道有没有可能,有大佬有意见吗?

[编辑]:

首先感谢大家的支持,事实上我需要更准确地处理我的问题。 没错,我可以通过经典的return 返回两个课程。但是让我解释一下我到底想做什么:

  • 我有一个包含一些插件的核心应用程序。插件可以在内部集成到核心,也可以通过经典的 NPM 安装。如上所述,我使用remi 插件加载器。
  • 所需的规则如下: 每个插件通过回调获得核心 API 访问。每个插件都可以公开要在其他插件中使用的类。每个插件都可以继承那些暴露(即导出)的插件。

这是我对插件的描述:

/**
 * This class is a sample plugin
 * @class
 */
class Sample {
    constructor(api) {
        this.api = api;
    }


    /**
     * Shows a test log
     */
    test() {
        console.log("======> I'm working !");
    }
}

function loaded(api) {
    let s = new Sample(api);
}

module.exports = (api, options) => {

};

module.exports.attributes = {
    loadedCallback: loaded,
    name: "sample-plugin",
    version: "0.0.0",
    category: "misc",
    description: "I'm a sample plugin",
    classes: [Sample]
};

核心插件管理器将在第一次加载所有插件,并将所有导出到classes属性属性的类原型注册到一个数组中。 然后调用loaded(api) 函数并通过api.classes 对象实例化类。 在另一个插件中,我可以这样做:

function loaded(api) {
    let sample = new api.classes.Sample(api);   
}

我可以实例化另一个插件中描述的类。 这就是想法。 但是我想通过多重继承做一个更复杂的 API 使用,例如:

  • 插件 A 公开 A 类
  • 插件 B 公开 B 类扩展 A
  • 插件 C 公开 C 类扩展 B

为了更清楚,我想全局导出一些类,以获得 NPM 模块之间的共享访问

【问题讨论】:

  • 我不想使用返回函数,因为该函数可以有多个类 - 这是什么意思?为什么不return { A, B };
  • 不,如果不首先调用 ready 并传入一个API 来实际创建类,这显然是不可能的。另外,为什么不直接使用里面的类呢?

标签: node.js function class ecmascript-6


【解决方案1】:

你可以从ready函数返回类A,所以在调用ready之后你可以访问A

function ready(api) {
    class A extends api.C {
        contructor() {
            this.foo = "bar";
        }
    }

    class B extends A {
        contructor() {
            this.bar = "foo";
        }
    }
    return {A : A};
}

let classA = ready(api).A;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2013-02-08
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2017-02-02
    • 2016-08-04
    相关资源
    最近更新 更多