Javascript 未捕获类型错误:myModule.function不是函数

Javascript 未捕获类型错误:myModule.function不是函数,javascript,dojo,Javascript,Dojo,如果通过define加载模块,我无法调用模块中定义的函数,但是当我需要该模块时,该函数存在并且可以调用。像这样的 呼叫模块 define([ "dojo/_base/declare", ... , "app/myModule" ], function (declare, ... , myModule) { var thisModule = declare(null, { constructor: function () {

如果通过define加载模块,我无法调用模块中定义的函数,但是当我需要该模块时,该函数存在并且可以调用。像这样的

呼叫模块

define([
    "dojo/_base/declare",
    ... ,
    "app/myModule"

], function (declare, ... , myModule) {

        var thisModule = declare(null, {

            constructor: function () {

            }
        });

        /**
         * Go to next page
         */
        thisModule.nextPage = function () {

            myModule.goToPage(nextPage).then(function(){

            });
        };

        return thisModule;
});
被叫模块

define([
    "dojo/_base/declare"
],

function (declare) {

    var myModule = declare(null, {

        constructor: function () {

        }
    });

    myModule.goToPage = function(page){

        var deferred = new Deferred();

        //some code

        deferred.resolve(1);

        return deferred.promise;
    };

    return  myModule;

});
我得到了这个错误

未捕获的TypeError:myModule.goToPage不是函数

但是,如果我在代码周围加上require,并且requiremymodule可以工作,并且函数存在于myModule对象上

像这样

thisModule.nextPage = function () {

     require("app/myModule", function(myModule){

        myModule.goToPage(nextPage).then(function(){                
        });

    });         
};

问题在于define导入的顺序,
myModule
在define中引用了其他加载的模块,因此,如果是这样,请将模块放在declare之后,在
define
calback
函数中,如下所示:

define([
    "dojo/_base/declare",
    "app/myModule",
    ...

], function (declare,myModule, ... ) {
    ....
})

这能解决问题吗?否则请发布整个代码以再次检查:)好的,我按照您的建议做了,并将模块移动到最开始的位置,在声明之后,但是这并没有解决问题,它无法找到函数。我可能需要重写模块,我试图创建静态方法(因此我不必每次在代码中的其他位置使用模块时都创建新实例),这可能是它们无法工作的原因。仍在研究中。嗯,这很奇怪,您是否对调用模块使用require?那么,当您使用调用模块时,以及如何使用它?它将在自定义小部件中使用,并使用define包含在顶部,并显示在函数参数中。然后在自定义小部件中,我有一个使用它的函数,它只调用thisModule.NextPage,该部分工作正常。