Javascript AMD单件和;“继承”;“的;“私人”;方法

Javascript AMD单件和;“继承”;“的;“私人”;方法,javascript,js-amd,Javascript,Js Amd,我想在Javascript中模仿类和类继承最常用的技术可能是John Resig提供的简单Javascript继承解决方案,它不属于大型框架(http://ejohn.org/blog/simple-javascript-inheritance). 至少在jquery生态系统中是这样。有些人还提取了backbone.js的继承解决方案(它似乎基于goog.inherits) 我喜欢这两种解决方案。但不知何故,我觉得有更简单的解决方案,特别是在一些子区域,例如Javascript单例,考虑到JS只

我想在Javascript中模仿类和类继承最常用的技术可能是John Resig提供的简单Javascript继承解决方案,它不属于大型框架(http://ejohn.org/blog/simple-javascript-inheritance).
至少在jquery生态系统中是这样。有些人还提取了backbone.js的继承解决方案(它似乎基于goog.inherits)

我喜欢这两种解决方案。但不知何故,我觉得有更简单的解决方案,特别是在一些子区域,例如Javascript单例,考虑到JS只有对象这一事实

两本书/博客在这方面给我留下了深刻的印象。第一个是来自Stoyan Stefanov(章节“代码重用模式”)的“Javascript模式”,特别是“继承”/“扩展”函数(浅拷贝)的代码重用

另一个是“AMD模块模式:单体”(http://unscriptable.com/2011/09/22/amd-module-patterns-singleton). 这很有意思:

由于AMD只执行一次定义函数,我们实际上创建了一个单例

所以我想要有这样的AMD单例,简单地说是一个由AMD工厂函数/definiton函数返回的对象

但我也希望能够“继承”/重用来自其他AMD单例的方法。这可以通过扩展函数来实现

现在问题来了:
Extend只是给了我AMD单体模块的“公共”方法,但我也想要“私有的”(闭包范围函数)

我可以将一个“extractAllMethods”方法注入到singleton模块中,这些模块将它们的所有(也是私有的)方法返回给方法调用方,并将其与扩展相结合,以将其合并到新的singleton中,但这是一个好的解决方案吗

有没有人有更好的解决方案来从AMD单体模块中提取私有方法

提前感谢

沃尔夫冈

我自己找到了解决办法

他给我的解决方案是:
我不需要通过闭包使用私有方法。
闭包使代码更难维护。
因此,没有私有方法,我只需要extend或prototype属性

他提出了一个很好的观点:“如果您使用闭包隐藏变量或创建“私有”和“特权”方法,然后编写不可维护的代码。简单的事实是,私有变量在JavaScript中不是必需的。如果您正在构建API,则您的公共方法是您记录的方法;您的私有方法是您不记录的方法。”——或者,我可以补充,您可以对它们进行不同的标记或命名。但是不能测试任何隐私是一种痛苦。