【问题标题】:can i call one js file from another .我可以从另一个调用一个 js 文件吗?
【发布时间】:2010-01-09 17:10:49
【问题描述】:

我有一个 asp.net mvc 应用程序,我正在尝试将我所有的 javascript 移出到 js 文件中。现在我有一个叫 sharedfunctions.js 的,到处都在使用。

问题是,如果我将一些代码移动到调用 sharedfunctions.js 文件中方法的 js 文件中,它似乎不再起作用。

在 js 文件中分解出通用代码并让它们真正正常工作的最佳方法是什么?

【问题讨论】:

标签: javascript jquery file


【解决方案1】:

只要在页面查询中引用了所有 .js 文件,所有其他人都可以访问其中的函数/变量一旦页面加载

我要强调最后一点,因为它很可能是您的问题的根本原因。可能是.js文件加载的顺序不对。

如果您有一些立即执行的 javascript(例如,它不是由页面事件触发的),那么它很可能会在您的 sharedfunctions.js 文件包含在页面中之前开始执行。在这种情况下,sharedfunctions.js 中的函数实际上不会在其他 javascript 执行时存在。

看看你能不能看看事情的顺序来消除这些问题。例如,尝试确保您的 sharedfunctions.js 作为页面上的第一个脚本文件加载。

恕我直言,这比尝试破解您现有的 js 文件以直接加载其他 js 文件的内容更可取。

【讨论】:

    【解决方案2】:

    你认为你用伪造的函数覆盖你的函数的问题是什么?如果在你定义一个函数之前是这样,你可以检查你是否已经定义了它。

    if(typeof yourFunctionName == 'function')

    【讨论】:

      【解决方案3】:

      最好的方法是将它们全部放在一个文件中,在您的开发环境中,它被分解为每个类的文件或您使用的任何方法,只需按正确的顺序包含它们。

      如果你想动态包含一个 JS(使用 moo-tools 快捷方式,虽然你可以简单地使用他们的资产库)

      $$('head')[0].adopt(new Element('script',{'type':'text/javascript','src':'path to js file'}));
      

      【讨论】:

        【解决方案4】:

        一些图书馆解决方案

        Dojo:dojo.require("my.package.name");

        jQuery:$.getScript("url/to/script.js", function() { /* callback */ });

        【讨论】:

          【解决方案5】:

          使用这种模式:

          function IncludeJavaScript(jsFile)
          {
            document.write('<script type="text/javascript" src="' + jsFile + '"></scr' + 'ipt>'); 
          }
          

          【讨论】:

          • 如果写错地方会毁掉整个文档。
          • 虽然它确实允许一个文件包含另一个文件,但让文件本身管理文件间依赖关系肯定是非常糟糕的做法。此外,在继续函数调用的文件完全加载之前,Javascript 解释器仍然不会解析“包含”文件 - 在这种情况下,它不会有效地导入文件中其他代码可以使用的任何 javascript 代码进口。
          猜你喜欢
          • 2013-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-18
          • 2011-06-16
          • 1970-01-01
          • 1970-01-01
          • 2011-03-15
          相关资源
          最近更新 更多