可以在Javascript中继承模块

Inherit module in Javascript possible?

本文关键字:继承 模块 Javascript      更新时间:2023-09-26

我有这样一个模块:

var myModule= {};
(function( exports ){
    init();
    exports.doSomething= function(){
        return "test";
    };
    function init(){
        initSubscribers();
        initListeners();
        initForAdmins();//just for the admin
    }
    //... a lot of functions that maybe doing things depends on if user is admin or normal user
})( myModule );

我有2个网页:"正常页面"使用"myModule"为普通用户和"管理页面"使用"myModule"为管理员。

该模块的某些部分(普通用户和管理员用户)都可以使用,但有些部分是特定于用户类型的。

我想创建2个模块(myNormalModule和myAdminModule),从一般模块继承(与共享功能)。

我觉得"继承自一个模块"很奇怪。

我的generalModule必须是一个对象,也可以是一个模块

创建对象类型,然后从它们继承。你不能从模块继承。一个模块可以在自己的实现中使用另一个模块,但这不是继承。

因此,首先创建要使用的对象结构(包括适当的继承),然后将其组织到适当的模块中。而且,在将代码组织到模块中,模块可以定义对象类型,然后可以导出(例如共享)该对象类型,然后其他模块可以使用它或继承它。但是,模块本身只是一个代码组织结构,它不是一个继承结构。

所以,我建议你在担心模块之前弄清楚你的对象层次结构(包括继承),一旦设计好了,你就可以把它组织成任何合适的模块。例如,如果这个特定问题的所有对象类型几乎总是要一起使用,那么它们可能都放在一个模块中。

但是,如果这个问题的某些对象类型可能被自己使用,那么将它们分成自己的模块,以便每个模块只共享适当的部分,这可能是有意义的。

如果你有上下文,你想在模块之间共享,那么有几种不同的方法来做到这一点,这取决于它是什么以及它是如何使用的。上下文可以属于所有其他对象继承的基对象。或者,如果上下文是全局的,它可以存储在一个模块中,然后导出到想要访问它的其他模块。