0

我知道“将一个 javascript 文件包含到另一个 javascript 文件中”的话题已经讨论了很多。但我的情况略有不同,所以我找不到适合我的问题的答案。

假设有三个文件:test.html、starter.js 和 object.js

test.html 仅包含使用 jQuery 的 starter.js:

<html>
  <head>
    <script src="js/starter.js"></script>
  </head>
  <body>
  <script src="jquery/jquery-1.9.1.js"></script>
    <script>
    $( document ).ready(function() {
        $.getScript("js/starter.js", loadobject());
        alert( "a" );
    });
   </script>
  </body>
</html>

starter.js 包含一个$.getScript包含 object.js 的函数,如下所示:

function loadobject() {
    alert( "b" );
    $.getScript("object.js", function(){
    Object.init();
    alert( "c" );
    });
}

最后 object.js 包含一个对象,如下所示:

var Object = {
init: function () {
            // . . .
},
searchString: function (data) {
            // . . .
    }
};
Object.init();

据我所知,当在浏览器中调用 test.html 时,它应该在文档准备好后立即包含 starter.js。此外,starter.js 应该在调用时加载 object.js。但这似乎失败了,因为该行alert( "object loaded" );从未执行过。我也试错了很多,例如用 替换 starter.js 中的行$.getScript("object.js", function(){$.getScript("object.js", init(){但我无法找到解决方案 - 尽管它可能很简单。:(

如何解决此问题并正确包含包含对象的 js 文件?此外,如何Object在 starter.js 中初始化和访问新的?

我认为我搞砸了function(),但实际上我对此一无所知,并感谢任何提示。

谢谢!

4

2 回答 2

1

如果您按如下方式编写代码,则该代码有效,

HTML

无需加载 starter.js,因为您是通过 getScript 函数完成的

<!DOCTYPE html>
<html>
    <head>
        <!--<script src="closure-library/closure/goog/base.js"></script>-->
        <!--<script src="js/starter.js"></script>-->
    </head>
    <body>
        <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script>
        <script>
            $(document).ready(function() {
                $.getScript("js/starter.js", function(){
                    alert('starter loaded');
                    loadobject();
                });
                alert("a");
            });
        </script>
    </body>
</html>

对象.js

var theObject = {
    init: function() {
alert('init');
    },
    searchString: function(data) {

    }
};

启动器.js

指定绝对路径,并且在回调函数中,您可以按照您的假设访问该对象。将 Object 重命名为 theObject,因为在 Object 上调用函数会导致抛出 jquery 错误。

function loadobject() {
    alert( "b" );
    $.getScript("/test/js/object.js", function(){
    theObject.init();
    alert( "c" );
    });
}

您得到的结果是显示“a”>“starter loaded”>“b”>“init”>“c”的连续警报

于 2013-11-07T12:35:25.860 回答
0

传递函数引用而不是函数的返回值。您正在那里调用该函数loadobject()并将返回值传递给它。

  $.getScript("js/starter.js", loadobject);

或者

 $.getScript("js/starter.js", function(){
     loadobject()
 });
于 2013-11-07T09:38:07.543 回答