0

我正在编写一些更复杂的 javascript 应用程序,并且遇到了我自己知识的局限性——请原谅任何命名错误或明显的菜鸟,我不是 js 专业人士!

我有大约 4 或 5 个脚本放在他们自己的文件中,只是为了让事情更容易维护。因此,也许有一个脚本处理构建页面元素(如复杂表单),另一个只处理数据,创建通用 ajax 请求对象,为返回的数据定义解析器和错误函数,另一个纯粹面向显示。

我在页面中设置了全局变量,然后由在运行时加载的各种脚本填充。例如,我var myapp = { };在主 HTML 页面中定义,然后在脚本中各种函数填充这个“命名空间”,如:

myapp.myfunction = function(){
    // do stuff
}

问题是,尽管所有脚本都包含一个$(document).ready(function()包含所有函数定义的块,但当从一个引用另一个脚本的脚本调用函数时(也就是说,如果我的data.js文件调用文件myapp.myDisplayFunction中的函数,display.js我有时会得到一个Object has no method 'myDisplayFunction'

除了将所有功能都塞进一个庞大的脚本之外,您如何处理这个问题?有没有我错过的最佳实践?或者这只是指定调用脚本的不同顺序的问题?

谢谢

4

2 回答 2

0

Just check for the function before using:

if(typeof(myapp.myDisplayFunction) !== undefined) {
    // do your stuff
} else {
    // wait for a while
}

And check whether you have async attribute set while loading the .js files.

于 2013-01-09T18:59:35.253 回答
0

当您不确定要调用的方法是否存在(已加载)时,您可以进行检查:

if (myapp) //my app namespace is defined
{
    if (myapp.myFunction) //myFunction is defined
    {
        myapp.myFunction();
    }
    else
        alert('You have to load myFile.js first!');    
}
于 2013-01-09T18:55:08.223 回答