目前我有一个模块构建器。在此脚本的精简版本中,正文单击会触发foo()
,从而引发错误。我想将一个错误处理程序附加到整个模块对象,以捕获从其中抛出的任何内容,不仅在创建期间,而且在运行时。有可能吗?
目前,“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()
});
答案 0 :(得分:1)
如果您需要,则需要在每个代码执行级别添加try
和catch
。
也就是说,在“定义”时,在构造函数(如果存在),每个方法体和每个事件处理程序中。
另外,也许这只是你的示例代码,但是这个:
$('body').on('click', function() {foo()});
可能就是这样:
$('body').on('click',foo);