在以下代码示例中:
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
对象的每行代码。
提前致谢!
答案 0 :(得分:1)
Error.constructor
是对Function
函数的引用,因为Error
是函数,函数由Function
构造。
你可以做到:
var oldError = Error;
Error = function( arg ) {
console.log('Constructor');
return new oldError( arg );
};
但这并不能保证完全可行,因为如果模块在代码之前运行,模块就可以存储对Error
构造函数的本地引用。