私は明確にできないWebアプリケーションからいくつかの動作が発生しています。エラーを発生させないように警告ラインを追加して実際にデバッグします。アラートを使用したデバッグはどのように解決できますか?
私は、コンテンツを表示する関数である "main"関数などのinitメソッドを持っています(aはグローバル変数で、名前空間の一部です) PS:私の最小限の例では、問題を引き起こしていた重要な部分が欠落していました。
a = undefined;
init = function() {
if (a === undefined) { a = new A } //global variable
alert("1 - a gets defined");
}
//method is part of A when A is constructed
A.show = function() {...}
//PS: the call to init() was part of a content-dependant method where init was skipped altogether when no content was loaded yet.
updateContent = function(){
if (noDataLoaded()) {return;}
init(); //PS: Init has been moved before the content check
performUpdatesAccordingToContent();
}
main() {
updateContent();
alert("2 - trying to display a");
a.show();
}
上記のように実行すると、警告1が表示され、警告2が表示され、getの内容が表示されます。 警告なしで実行した場合、次のエラーがアプリを壊し、スローされます。
TypeError: a is undefined
文書readyイベントが私の知る限り、解雇されたと警告ラインがチェックするために追加された後にすべての関数が呼び出されます適切な実行順序。
質問はどのように警告線を追加すると、初期化の問題を解決することができますか?どのようにそれらなしでそれを解決するには?
'new A'は_prototype_で' A'を初期化しますが、 'show'はコンストラクタで定義されているため継承されません。 'A.prototype.show = function(){...}'を使うと修正されますか?アラートはコードの実行に違いはないはずですから、他の方向でエラーを調べてください。 – somethinghere
縮小した例を作成することは重要ですが、コードは無効で意味がありません。明らかに、これは 'alert()'で動作すると言っているので、あなたが実行しているものではありません。問題の実際の表現を投稿してください。 –
アラートによってコードが変更された場合、ローカルファイルをロードするなどの非同期処理や角度やjqueryなどのライブラリを混在させるなど、タイミングの違いが生じるような場合には、考えられる唯一の理由が考えられます。私は同じことが私に起こったが、通常は警報が赤ちゃんであることが判明し、問題はイベントの順番である。 – Toby