javascript策略/最佳实践

时间:2013-01-09 18:43:16

标签: javascript jquery

我正在编写一些更复杂的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'

除了将所有功能分成一个大型脚本之外,您如何处理这个问题?我缺少最佳做法吗?或者这仅仅是指定调用脚本的不同顺序的问题?

谢谢

2 个答案:

答案 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属性。