我正在创建一个简单的网站并尝试使用闭包编写我的Javascript代码。我的第一个目标是在页面加载时显示警告框。但这是失败的。我页面的头部包含:
<script src="js/dukegen.shell.js"></script>
<script src="js/dukegen.js"></script>
<script>
window.onload = dukegen.init();
</script>
这是dukegen.shell.js:
dukegen.shell = (function() {
vat initModule = function () {
alert("STATRTED");
};
return {initModule: initModule};
}());
这是dukegen.js:
var dukegen = (function () {
var init = function () {
dukegen.shell.initModule();
};
return {init: init};
}());
当我加载页面时,dukegen.shell.initModule()中的执行错误(“Uncaught TypeError:无法调用方法'initModule'未定义”); 。我未经训练的眼睛无法发现问题。我的两个javascript文件都在同一个文件夹中。
答案 0 :(得分:2)
var initModule = function () {
alert("STATRTED");
};
not vat。
答案 1 :(得分:0)
试试这个:
dukegen = (function (shell) {
var init = function () {
shell.initModule();
};
return {init: init};
}(dukegen.shell));
答案 2 :(得分:0)
更改包含脚本的顺序:
<script src="js/dukegen.js"></script>
<script src="js/dukegen.shell.js"></script>
执行js/dukegen.shell.js
时,dukegen
对象尚不存在,因此dukegen.shell = ...
的赋值将引发错误。或者,如果由于某种原因该对象存在,您将使用第二个脚本覆盖。
另请确保修复所有语法错误(vat initModule = function () {
)并使用window.onload = dukegen.init
。
答案 3 :(得分:0)
头部的片段是否正确?你要包括dukegen.shell.js
,定义dukegen.shell,然后在dukegen.js中覆盖dukegen
答案 4 :(得分:0)
你想创建一个命名空间,好吗?但是你要覆盖它......我认为最好的方法是:
var dukegen = {}; //your namespace, ok?
//here we are adding an atribute to your namespace, not overwriting it like you did before
dukegen.main = (function () {
var init = function () {
dukegen.shell.initModule();
};
return {init: init};
}());
//and creating another module
dukegen.shell = (function() {
var initModule = function () {
alert("STATRTED");
};
return {initModule: initModule};
}());
//bootstrapping your app
dukegen.main.init();
// and a tip, always use dependency inject to call another module, like this:
dukegen.main = (function (myShellModuleOrAnyOtherModule) {
var init = function () {
myShellModuleOrAnyOtherModule.initModule();
};
return {init: init};
}(dukegen.shell));