2012-04-07 9 views
0

現在、私はモジュールビルダーを持っています。この要約版のスクリプトでは、本体クリックでエラーが発生するfoo()が発生します。私はエラーハンドラをモジュールオブジェクト全体に貼り付けて、作成中だけでなく実行時にもスローされたものをキャッチしたいと思います。出来ますか?JSのオブジェクトからキャッチエラー

現在、「foo alert」がコンソールに表示されます。私はそれを抑制し、中央ロガーに必要なログをさせたいと思います。この場合、代わりに「ログ」を見たいと思っています。

$(function() { 

    var moduleCollection = {}; 

    //creates modules, stores them and returns for reference 
    function define(name, def) { 
     var newModule = def();    //creates the module object 
     moduleCollection[name] = newModule; //store 

     //somewhere here, i must attach some sort of 
     //error handlers for the module 
     //something like: 
     newModule.onerror = function(){ 
      //execute error procedure (like logging) 
      console.log('logged'); 
     } 

     return newModule //return as reference 
    } 

    //a module definition 
    var mymod = define('mymod', function() { 
     //foo chokes unintentionally and results into an error 
     function foo() {throw new Error('foo alert');} 

     function start() { 
      //a body click calls foo 
      $('body').on('click', function() {foo()}); 
     } 
     return {start: start} 
    }); 

    //start module 
    mymod.start() 

});​ 

答えて

1

あなたがいることをしたい場合は、コード実行の各レベルでtrycatchを追加する必要があります。

つまり、「定義」時、コンストラクタ(存在する場合)、各メソッド本体、および各イベントハンドラにあります。

また、おそらくそれはちょうどあなたのコード例ですが、この:実際に、私が作成されたモジュールの制御になりません

$('body').on('click',foo); 
+0

$('body').on('click', function() {foo()}); 

は、単純にこのことでした。しかし、私はモジュールビルダースクリプトを構築しています。そのため、モジュールオブジェクトによって生成されたエラーがモジュールによって発生した場合、モジュールオブジェクト自体に「キャッチ」を付加して一元的にログに記録する必要がありました。 – Joseph

+0

イベントハンドラに(コードではなく)直接バインドされている関数のエラーを「キャッチ」できません。ドキュメントに直接含まれているスクリプト(書いていないもの)からエラーを「キャッチ」することはできません。 –

+0

作成されたオブジェクトにアクセスでき、重要な属性(関数)が「プライベート」(範囲外)でない場合、それらの関数属性をtry-catch内でオリジナルを呼び出すラッパーに置き換えることができます。 –

関連する問題