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>

//design.jsで..。

function initializeDesign() {

    var canvasManager = new canvasManager();

}

助けてくれてありがとう。

4

2 に答える 2

5

の名前canvasManagerは、他のJSファイルで定義したものではなく、new canvasManager()のを参照しています。inの宣言は、他の宣言をシャドウイングします。canvasManagervar canvasManagercanvasManagercanvasManagerinitializeDesign()

于 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 に答える