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()
});
:
は、単純にこのことでした。しかし、私はモジュールビルダースクリプトを構築しています。そのため、モジュールオブジェクトによって生成されたエラーがモジュールによって発生した場合、モジュールオブジェクト自体に「キャッチ」を付加して一元的にログに記録する必要がありました。 – Joseph
イベントハンドラに(コードではなく)直接バインドされている関数のエラーを「キャッチ」できません。ドキュメントに直接含まれているスクリプト(書いていないもの)からエラーを「キャッチ」することはできません。 –
作成されたオブジェクトにアクセスでき、重要な属性(関数)が「プライベート」(範囲外)でない場合、それらの関数属性をtry-catch内でオリジナルを呼び出すラッパーに置き換えることができます。 –