我有一个这样的模块:
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必须是一个对象,或者它可以是一个模块吗?
答案 0 :(得分:2)
您可以创建对象类型,然后从它们继承。你不能从模块继承。一个模块可以在其自己的实现中使用另一个模块,但这不是继承。
因此,首先创建要使用的对象结构(如果适用,包括继承),然后将其组织到适当的模块中。并且,在将代码组织到模块中时,模块可以定义对象类型,然后可以导出(例如共享)该对象类型,然后其他模块可以使用它或从中继承。但是,模块本身只是一个代码组织结构,它不是一个继承结构。
因此,我建议你在担心模块之前弄清楚你的对象层次结构(包括继承),一旦设计好了,你就可以把它组织成任何适当的模块。例如,如果这个特定问题的所有对象类型几乎总是一起使用,那么它们可能全部放在一个模块中。
但是,如果这个问题的某些对象类型可能会被他们自己使用,那么将它们分成自己的模块可能是有意义的,因为每个只共享适当的部分。
如果您有要在模块之间共享的上下文,那么有几种不同的方法可以做到这一点,具体取决于它是什么以及它是如何使用的。上下文可以属于所有其他对象继承的基础对象。或者,如果上下文更全局,则可以将其存储在一个模块中,然后导出到需要访问它的其他模块。