2012-06-19 4 views
0

У меня возникли проблемы с попыткой использовать функцию в файле javascript, который я включил в другой файл при запуске страницы.javascript не включая файлы?

В файле design.js я хочу сделать var x = new canvasManager(); И canvasManager определяется в canvasManager.js.

Однако, когда я пытаюсь это сделать, я получаю некоторую «неопределенную ошибку типа undefined не является функцией». Что дает? Ниже приведен соответствующий код на моем HTML файл, который я ввожу в браузере:

<link rel="stylesheet" type="text/css" href="styles.css" /> 
<script type="text/javascript" src="jquery/jquery.js"></script> 
<script type="text/javascript" src="jquery/kinetic.js"></script> 

<script type="text/javascript" src="designManager.js"></script> 
<script type="text/javascript" src="canvasManager.js"></script> 
<script type="text/javascript" src="gateManager.js"></script> 
<script type="text/javascript" src="wireManager.js"></script> 
<script type="text/javascript" src="toolbarManager.js"></script> 
<script type="text/javascript" src="objectDrawing.js"></script> 

<script type="text/javascript" src="util/mouseEventManager.js"></script> 
<script type="text/javascript" src="util/hotkeyManager.js"></script> 
<script type="text/javascript" src="util/htmlUtils.js"></script> 
<script type="text/javascript" src="design.js"></script> 


<script type="text/javascript"> 
    $(document).ready(function(){ 
     initializeDesign(); 
    }); 
</script> 

// в design.js ...

function initializeDesign() { 

    var canvasManager = new canvasManager(); 

} 

Спасибо за любую помощь.

+0

Что может сделать canvasManager.js? – chrisvillanueva

+0

Есть ли способ консолидировать эти JS-файлы? – Charlie

+0

Может быть ошибкой правописания. –

ответ

5

Название canvasManager в new canvasManager() имеет в виду canvasManager в var canvasManager, не canvasManager, что вы определили в другой файл JS. Объявление canvasManager в initializeDesign() затеняет другое объявление.

+0

Мой ниггер! Хорошо поймал – JDS

0

Измените имя переменной в:

var canvasManager = new canvasManager(); 

При определении, что локальная переменная, она заменяет глобальную функцию с тем же именем, так что new canvasManager() просто относится к вашей локальной переменной не к глобальной функции. Таким образом, поскольку значение локальной переменной все еще не определено, вы получаете сообщение об ошибке.

Изменить его:

var theCanvasManager = new canvasManager(); 

или что-то подобное, и он должен работать нормально.


Хотя я бы не рекомендовал это (потому что я думаю, что это не супер читаемый код и может привести к другим случайным ошибкам), вы также можете сделать это:

var canvasManager = new window.canvasManager(); 

Здесь вы явно ссылаясь для функции глобального охвата, поэтому она отличается от локальной переменной.