在本机Error对象的构造中调用函数

时间:2013-07-27 23:03:02

标签: javascript node.js error-handling prototype v8

在以下代码示例中:

var oldConstructor = Error.constructor;
Error.constructor = function() {
    console.log('Constructor');
    oldConstructor.apply(null, arguments);
};
var a = new Error('ok');

为什么不打印'Constructor'

  • 每次调用本地Error对象的构造函数时,如何运行函数?

我试图实现的目标是,而不是冒充Errors我的代码库中使用的不同模块的回调链(mongoose,express.js,...等),只是希望每个错误发出一个事件或调用一个方法(可能带有Observer模式)。

我试图以这种方式解决问题,而不是修改创建新Error对象的每行代码。

提前致谢!

1 个答案:

答案 0 :(得分:1)

Error.constructor是对Function函数的引用,因为Error是函数,函数由Function构造。

你可以做到:

var oldError = Error;
Error = function( arg ) {
    console.log('Constructor');
    return new oldError( arg );
};

但这并不能保证完全可行,因为如果模块在代码之前运行,模块就可以存储对Error构造函数的本地引用。

您可以使用uncaughtexception event