我想在本机 NodeJS (0.11.5) 扩展中创建自定义异常。我正在尝试Error
在 V8 (3.20.11) 中创建内置类的子类。
基本上,我正在寻找与以下 Javascript 代码等效的 C++:
function MyError(message) {
Error.apply(this, arguments);
this.message = message;
}
MyError.prototype = new Error;
MyError.prototype.name = MyError.name;
new MyError("message")
我尝试挖掘 V8 源代码,发现以下辅助方法似乎可以完成我想要的部分工作:
Handle<Object> Factory::NewError(const char* constructor,
Handle<String> message)
不幸的是,它看起来像是一个私有 API,我对 V8 的理解还不够,无法弄清楚如何自己构建类似的东西。能够编写一个我可以以与创建内置Error
实例类似的方式使用的方法会很棒,例如:
ThrowException(v8::Exception::Error(v8::String::New(msg)))
// becomes...
ThrowException(MyError(v8::String::New(msg)))
我正在寻找一个尽可能接近内置Error
类的子类的解决方案。它可能应该满足以下条件:
var e = new MyError("message");
assert(e instanceof MyError);
assert(e instanceof Error);
assert(e.name === "MyError");
assert(e.message === "message");
有什么建议从哪里开始?