访问类内部函数

时间:2017-05-30 07:14:17

标签: node.js function class ecmascript-6

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

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

以下是我想要做的一个例子:

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模块之间的共享访问

1 个答案:

答案 0 :(得分:0)

您可以从A函数返回课程ready,因此在致电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;