Dojo:覆盖预加载模块

Dojo:覆盖预加载模块,dojo,requirejs,amd,Dojo,Requirejs,Amd,我使用的是一个预构建的客户端应用程序,所有这些应用程序都是用Dojo1.8(AMD风格)编写的,我需要对其进行扩展 我可以访问源代码,但希望尽可能保持它不变,而倾向于覆盖(这就是应用程序插件框架的工作方式,其他任何东西都可能是黑客) 我的脚本仅在基本应用程序脚本之后加载。例如,我不能修改djConfig,也不能在加载基本应用程序模块之前修改任何其他内容 这里是我的问题:我想扩展一个基本应用程序类(用declare创建)并全局应用我的覆盖——即使在已经需要包含该类的模块(但尚未实例化)的预加载模块

我使用的是一个预构建的客户端应用程序,所有这些应用程序都是用Dojo1.8(AMD风格)编写的,我需要对其进行扩展

我可以访问源代码,但希望尽可能保持它不变,而倾向于覆盖(这就是应用程序插件框架的工作方式,其他任何东西都可能是黑客)

我的脚本仅在基本应用程序脚本之后加载。例如,我不能修改djConfig,也不能在加载基本应用程序模块之前修改任何其他内容

这里是我的问题:我想扩展一个基本应用程序类(用declare创建)并全局应用我的覆盖——即使在已经需要包含该类的模块(但尚未实例化)的预加载模块上也是如此

到目前为止,我找到的最佳解决方案是使用require()为包含该类的模块添加别名。但这仅适用于在我可以注册别名后需要该类的模块。

状态:

在模块名称空间中输入模块值后,它将 不在每次需要时重新计算。在实践层面上,这 表示只调用一次工厂,返回值为 缓存并在使用给定模块的所有代码之间共享。(注:附件) dojo loader包含非标准函数require.unde,该函数 取消定义模块值。)

这意味着,如果修改模块的原型,更改将在整个应用程序中传播,甚至传播到更改之前创建的实例,因为JavaScript就是这样工作的

要修改通过
dojo/\u base/declare
创建的类的原型,构造函数上定义了一个方法:

require(['App'], function(App) {
    App.extend({
        run: function() {
            // override `run` method here         
        }
    });
});
查看它的作用:

状态:

在模块名称空间中输入模块值后,它将 不在每次需要时重新计算。在实践层面上,这 表示只调用一次工厂,返回值为 缓存并在使用给定模块的所有代码之间共享。(注:附件) dojo loader包含非标准函数require.unde,该函数 取消定义模块值。)

这意味着,如果修改模块的原型,更改将在整个应用程序中传播,甚至传播到更改之前创建的实例,因为JavaScript就是这样工作的

要修改通过
dojo/\u base/declare
创建的类的原型,构造函数上定义了一个方法:

require(['App'], function(App) {
    App.extend({
        run: function() {
            // override `run` method here         
        }
    });
});

查看实际操作:

最好的方法是覆盖要编辑的模块原型。您可以直接使用prototype或使用dojo.extend来实现这一点。还可以查看“dojo monkey patching”,最好的方法是覆盖要编辑的模块原型。您可以直接使用prototype或使用dojo.extend来实现这一点。还可以查看“dojo猴子补丁”,这正是我要找的。谢谢!这正是我想要的。谢谢!