【发布时间】:2012-02-09 11:02:50
【问题描述】:
我猜想在 Javascript 中模拟类和类继承最常用的技术可能是 BIG 框架之外的,John Resig 的简单 Javascript 继承解决方案 (http://ejohn.org/blog/simple-javascript -继承)。
至少在 jquery 生态系统中。也有人提取了backbone.js的继承方案(好像是基于goog.inheritshttp://bolinfest.com/javascript/inheritance.php)。
我喜欢这两种解决方案。但不知何故,我觉得有更简单的解决方案,特别是在某些子领域,例如 Javascript 单例,考虑到 JS 只有对象的事实。
在这方面,有两本书/博客给我留下了深刻的印象。第一个是 Stoyan Stefanov 的“Javascript 模式”(“代码重用模式”一章),尤其是通过“扩展”函数(浅拷贝)的“继承”/代码重用。
另一个是“AMD 模块模式:单例”(http://unscriptable.com/2011/09/22/amd-module-patterns-singleton)。这很吸引人:
由于 AMD 只执行一次定义函数,我们基本上创建了一个单例。
所以我想要这样的 AMD 单例,只是一个由 amd 工厂函数/定义函数返回的对象。
但我也希望有可能从其他 AMD 单例中“继承”/重用方法。这可以通过扩展功能来实现。
现在问题来了:
Extend 只是给了我 AMD 单例模块的“公共”方法,但我也想要“私有”(闭包范围函数)。
我可以将“extractAllMethods”方法注入到单例模块中,该模块将所有(也是私有的)方法返回给方法调用者,并将其与扩展组合以将其合并到新的单例中,但这是一个好的解决方案吗?
有人有更好的解决方案来从 AMD 单例模块中提取私有方法吗?
提前致谢
沃尔夫冈
【问题讨论】:
标签: javascript js-amd