我知道“将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" );
永远不会被执行。
我也经常试错,例如用$.getScript("object.js", function(){
替换starter.js $.getScript("object.js", init(){
中的行,但我找不到解决方案 - 虽然它可能很简单。 :(
如何解决此问题并正确包含包含对象的js文件?
另外,如何在starter.js中初始化和访问新的Object
?
我认为我搞砸了function()
,但实际上我对此毫无头绪并欣赏任何提示。
谢谢!
答案 0 :(得分: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>
<强> object.js 强>
var theObject = {
init: function() {
alert('init');
},
searchString: function(data) {
}
};
<强> starter.js 强>
指定绝对路径,在回调函数中,您可以按照假设访问对象。将Object重命名为theObject,因为在Object上调用函数会导致抛出jquery错误。
function loadobject() {
alert( "b" );
$.getScript("/test/js/object.js", function(){
theObject.init();
alert( "c" );
});
}
您获得的结果是显示连续警报 “a”&gt; “起动器装载”&gt; “b”&gt; “init”&gt; “C”
答案 1 :(得分:0)
传递函数引用而不是函数的返回值。你在那里调用函数loadobject()
并将返回的值传递给它。
$.getScript("js/starter.js", loadobject);
或
$.getScript("js/starter.js", function(){
loadobject()
});