0

在以下代码示例中:

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

为什么不'Constructor'打印?

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

我试图实现的目标是,我不想让Errors我的代码库中使用的不同模块(猫鼬、express.js、...等)的回调链冒泡,我只想让每个错误都发出一个事件或调用一种方法(可能带有观察者模式)。

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

提前致谢 !

4

1 回答 1

1

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

你可以这样做:

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

但这不能保证完全有效,因为如果模块Error在您的代码之前运行,它们可能已经存储了对构造函数的本地引用。

您可以改为使用uncaughtexception 事件

于 2013-07-27T23:08:59.773 回答