2014-01-24 5 views
-2

Я начинаю простой сайт и пытаюсь закодировать свой Javascript, используя закрытие. Моя первая цель - показать окно предупреждения при загрузке страницы. Но это неудачно. Головная часть моей страницы содержит:Закрытие 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}; 
}()); 

Когда я загрузить страницу, то ошибки выполнения («Неподключить TypeError: невозможно вызвать метод initModule« неопределенного ») на dukegen.shell.initModule(); , Мой неподготовленный глаз не может определить проблему. Оба моих файла javascript находятся в одной папке.

+0

Попробуйте 'window.onload = dukegen.init', no parens. – elclanrs

+0

Нет кубиков. Все тот же результат. – badgerduke

ответ

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.

2
var initModule = function() { 
     alert("STATRTED"); 
    }; 

нет НДС.

+0

Извиняюсь, что такое ват? – badgerduke

+0

@badgerduke: 'vat initModule = function() {' (посмотрите на свой код) –

0

попробовать это:

dukegen = (function (shell) { 
    var init = function() { 
     shell.initModule(); 

    }; 
    return {init: init}; 
}(dukegen.shell)); 
+0

Все тот же результат. – badgerduke

0

Правильно ли отрезок от главы? Вы включаете dukegen.shell.js, определяя dukegen.shell, затем перезаписываете dukegen в dukegen.js

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)); 
+0

и еще одна вещь, я не вижу закрытия в вашем коде ... –

+0

Вы пытались запустить код? Вы получите сообщение об ошибке, потому что 'dukegen'' undefined'. –

+0

Нет, но я обновил код выше. Попробуй еще раз! –

Смежные вопросы