【问题标题】:AMD singletons and "inheritance" of "private" methodsAMD 单例和“私有”方法的“继承”
【发布时间】: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


    【解决方案1】:

    我自己找到了解决方案!

    I found a blog from the well respected Nicholas C. Zakas

    他对我的解决方案是:
    我不需要通过闭包的私有方法。
    闭包使代码更难维护。
    所以,没有私有方法,我只需要扩展或原型属性。

    【讨论】:

    • 他提出了一个很好的观点:“如果您使用闭包来隐藏变量或创建“私有”和“特权”方法,那么您正在编写不可维护的代码。简单的事实是私有变量不是JavaScript 中的必需品。如果你正在构建一个 API,你的公共方法就是你记录的那些;你的私有方法是你不记录的。 - 或者,我可以添加,你标记或命名它们不同。但是不能测试任何私有的东西是很痛苦的。
    猜你喜欢
    • 2013-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2019-02-10
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多