0

我在尝试在启动页面时包含在另一个文件中的 javascript 文件中使用函数时遇到问题。

在文件 design.js 我想做 var x = new canvasManager(); 而 canvasManager 是在 canvasManager.js 中定义的。

但是,当我尝试这个时,我得到一些“未捕获的类型错误未定义不是函数”。是什么赋予了?以下是我在浏览器中输入的 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>

//在设计.js中...

function initializeDesign() {

    var canvasManager = new canvasManager();

}

感谢您的任何帮助。

4

2 回答 2

5

canvasManagerin的名称new canvasManager()是指canvasManagerin var canvasManager,而不是canvasManager您在其他 JS 文件中定义的那个。canvasManagerin initializeDesign()shadow 的声明覆盖了另一个声明。

于 2012-06-19T04:13:14.420 回答
0

在以下位置更改变量的名称:

 var canvasManager = new canvasManager();

当您定义该局部变量时,它会取代具有相同名称的全局函数,以便new canvasManager()仅引用您的局部变量而不是全局函数。因此,由于局部变量的值仍然未定义,您会看到您看到的错误。

将其更改为:

 var theCanvasManager = new canvasManager();

或类似的东西,它应该可以正常工作。


虽然我不推荐这个(因为我认为它不是超级可读的代码并且可能导致其他意外错误),你也可以这样做:

 var canvasManager = new window.canvasManager();

在这里,您明确引用了全局范围的函数,因此它与局部变量不同。

于 2012-06-19T04:19:24.860 回答