我正在编写一些更复杂的javascript应用程序,而且我遇到了我自己知识的限制 - 请原谅任何命名错误或明显的noob东西,我不是js pro!
我有大约4或5个脚本放在他们自己的文件中,只是为了让事情更容易维护。因此,可能有一个脚本处理构建页面元素(如复杂表单),另一个脚本处理数据,创建通用ajax请求对象,为返回的数据定义解析器和错误函数,另一个纯粹以显示为导向。
我在页面中设置了全局变量,然后由运行时加载的各种脚本填充。例如,我在主HTML页面中定义var myapp = { };
,然后在脚本中各种函数填充这个“命名空间”,如:
myapp.myfunction = function(){
// do stuff
}
问题在于,尽管所有脚本都包含一个包含所有函数定义的$(document).ready(function()
块,但是当从一个引用另一个脚本的脚本调用一个函数时(也就是说,如果我的data.js
文件调用了myapp.myDisplayFunction
文件中的函数display.js
,我有时会获得Object has no method 'myDisplayFunction'
除了将所有功能分成一个大型脚本之外,您如何处理这个问题?我缺少最佳做法吗?或者这仅仅是指定调用脚本的不同顺序的问题?
谢谢
答案 0 :(得分: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!');
}
答案 1 :(得分:0)
使用前请检查功能:
if(typeof(myapp.myDisplayFunction) !== undefined) {
// do your stuff
} else {
// wait for a while
}
并检查在加载async
文件时是否设置了.js
属性。