Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript策略/最佳实践_Javascript_Jquery - Fatal编程技术网

javascript策略/最佳实践

javascript策略/最佳实践,javascript,jquery,Javascript,Jquery,我正在着手编写一些更复杂的javascript应用程序,我也遇到了自己知识的局限性——请原谅任何命名错误或明显的noob问题,我不是js专业人士 我在自己的文件中放了大约4到5个脚本,只是为了让事情更容易维护。因此,可能有一个脚本处理构建页面元素(如复杂表单),另一个脚本处理数据,创建通用ajax请求对象,为返回的数据定义解析器和错误函数,还有一个脚本纯粹面向显示 我在页面中设置了全局变量,然后由运行时加载的各种脚本填充这些变量。例如,我定义var myapp={}

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

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

我在页面中设置了全局变量,然后由运行时加载的各种脚本填充这些变量。例如,我定义
var myapp={}
问题在于,尽管所有脚本都包含一个封装所有函数定义的
$(document).ready(function()
块),但当从一个引用另一个脚本的脚本调用函数时(也就是说,如果我的
data.js
文件调用
display.js
文件中的函数
myapp.myDisplayFunction
,我有时会得到一个
对象没有方法“myDisplayFunction”

除了将所有函数塞进一个大型脚本之外,您如何处理这个问题?是否有我遗漏的最佳实践?或者这只是一个指定脚本调用顺序的问题


谢谢

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

if (myapp) //my app namespace is defined
{
    if (myapp.myFunction) //myFunction is defined
    {
        myapp.myFunction();
    }
    else
        alert('You have to load myFile.js first!');    
}

使用前只需检查功能:

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

并在加载
.js
文件时检查是否设置了
async
属性。

只要确保如果一个脚本依赖于另一个脚本,“一个脚本”之前包含“另一个脚本”。我不明白,如果在文档准备就绪之前不调用任何函数,为什么不能定义函数。如果只是定义函数,那么将定义包装在$(文档)。ready(函数()中有什么意义?检查模块模式。这是,但我肯定有很多。@julio,请检查答案:函数声明/表达式不需要包含在
$(文档)中。ready()
,只包含这些函数的执行。继续在外部定义它们,但从内部触发任何初始化代码
$(文档).ready()
if(typeof(myapp.myDisplayFunction) !== undefined) {
    // do your stuff
} else {
    // wait for a while
}