在Javascript中继承模块可能吗?

时间:2015-09-27 01:45:02

标签: javascript inheritance module

我有一个这样的模块:

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必须是一个对象,或者它可以是一个模块吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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