揭示模块模式(RMP)的缺点

我最近熟悉了揭示模块模式(RMP),我读了很多关于它的文章。

它看起来是一个非常好的模式,我想开始在一个大项目中使用它。在我使用的项目中:jQuery、KO、Required JS、jQuery Mobile、JayData。在我看来,它将非常适合KO视图模型。

具体地说,我想使用THIS版本。

我找不到使用此模式的缺点,是不是因为没有缺点(我觉得很难相信)?

开始使用之前应该考虑什么?


解决方案

我读了@nemesv向我推荐的那篇文章(感谢:),我认为还有一个没有提到的缺点,所以我想我应该在这里添加它以供参考。下面是这篇文章的引语:

缺点

此模式的一个缺点是,如果私有函数引用 作为公共函数,如果修补程序不能重写该公共函数 是必要的。这是因为私有函数将继续 引用私有实现,并且该模式不适用于 公共成员,仅限于函数。

引用私有变量的公共对象成员也 以上述无补丁规则说明为准。

因此,使用显示模块模式创建的模块 可能比使用原始模块创建的模块更脆弱 模式,所以使用时应小心。

和我的附加内容:

您不能对此模式使用继承。例如:

var Obj = function(){
    //do some constructor stuff
}

var InheritingObj = function(){
    //do some constructor stuff
}

InheritingObj.prototype = new Obj();

InheritingObj.prototype.constructor = InheritingObj;

这是一个简单的js继承示例,但是在使用Revealing Prototype Pattern(存档的here)时,您需要这样做:

InheritingObj.prototype = (function(){
    //some prototype stuff here
}());

这将覆盖您的继承。

相关文章