首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Javascript对象的AMD AMD点菜扩展方法

基于Javascript对象的AMD AMD点菜扩展方法
EN

Stack Overflow用户
提问于 2012-09-21 19:44:19
回答 1查看 104关注 0票数 0

我正在开发一个javascript库,并希望将可选方法组存储在Javascript对象上的不同模块中。

这个库有两个模块,我们称它们为ModuleA和ModuleB。ModuleA导出一个类对象,让它称为ClassA,它只具有最小的核心功能。ModuleB定义了要在ClassA原型上设置的一组可选方法。

在库之外的第三个模块,ModuleC中,我想做以下几点:

  • 如果我只导入ModuleA并实例化ClassA,我知道我可以使用“InstanceA.MethodA(.)”访问InstanceA上的所有ModuleA方法。(其他方法也可以在InstanceA上定义)
  • 如果我同时导入ModuleA和ModuleB并实例化ClassA,我知道我可以使用InstanceA.MethodA(.)访问InstanceA上的所有ModuleA方法和ModuleB方法和‘InstanceA.MethodB(.)’。

我已经考虑过一些解决方案,但我不确定是否有更好的方法来实现这一点。以下是我所考虑的:

ModuleB修改ClassA,ModuleB进口ModuleA的工厂,以及ClassA。这些变化会不会持续下去?AMD是否保证跨环境导入相同的模块总是返回相同的对象?

ModuleB返回修改后的ClassA ModuleB扩展ClassA并返回新对象。在这个只有两个模块的例子中,这可能会很好,但是对于多个可选的方法模块来说呢?

如果您遇到过类似的情况,请告诉我,您的解决方案是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-30 04:57:40

以下是我的做法:

代码语言:javascript
复制
// Module A - Define ClassA
define(function() {
    function ClassA() {}
    ClassA.prototype.methodA = function() {};
    return ClassA;
});

// Module B - Extend
define(function() {
    return function(ClassToExtend) {
         ClassToExtend.prototype.methodB = function() { };
    };
});

// Module C - Sticking
define(function(require) {

    // Define ClassA
    var ClassA = require("module_a");

    // Extend ClassA with custom methods of ModuleB
    require("module_b")(ClassA);

    // Instanciate extended ClassA
    var InstanceA = new ClassA();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12537200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档