我正在开发一个JavaScript库,并希望将不同模块中的Javascript对象的可选方法组存储起来。AMD单点JavaScript扩展方法对象
该库有两个模块,我们称它们为ModuleA和ModuleB。 ModuleA导出一个类对象,我们称之为ClassA,它只具有最小的核心功能。 ModuleB定义了一组在ClassA原型上设置的可选方法。
在第三个模块不在库,ModuleC,我想以下几点:
如果我只导入ModuleA和实例ClassA的,我知道我有机会获得上使用'InstanceA所有ModuleA方法InstanceA.MethodA(...)”。 (其他方法也可以在InstanceA上定义)
如果我导入ModuleA和ModuleB并实例化ClassA,我知道我可以使用'InstanceA.MethodA(“)访问InstanceA上的所有ModuleA方法和ModuleB方法。 ..)'和'InstanceA.MethodB(...)'。
我已经考虑了一些解决方案,但我不确定是否有一个首选的方法来实现这一点。以下是我考虑的内容:
ModuleB更改ClassA ModuleB导入ModuleA并更改ClassA的工厂。这些变化会保证持续吗? AMD是否保证在一个环境中导入相同的模块始终返回相同的对象?
ModuleB返回改变的ClassA ModuleB扩展ClassA并返回新的Object。在这个例子中,这可能工作得很好,只有两个模块,但是多个可选方法模块呢?
如果您遇到过类似的情况以及您的解决方案,请让我知道。
顺便说一句,这两种方法的工作。但是,据我所知,第一种方法依赖于非标准行为。我测试过的模块加载实现保留了加载模块的缓存版本。但是,AMD规范似乎没有任何关于模块定义副作用的说法。如果这是错误的,请纠正我。 –
Dojo AMD Loader [文档](http://livedocs.dojotoolkit.org/loader/amd):'define'有两个额外的重要特征,可能不会立即显现出来: – phusick
1.模块创建是惰性的并且是异步的,当调用'define'时不会立即发生。这意味着工厂没有执行,并且模块的任何依赖关系都不会被解析,除非某些运行代码实际需要该模块。 – phusick