删除暴露给v8的C对象时,如何使可能指向此对象的句柄无效. 我正在使用v8作为更大应用程序的脚本接口.使用节点的ObjectWrap类在v8中包装和访问较大应用程序中的对象. 问题是,包裹物体的
我正在使用v8作为更大应用程序的脚本接口.使用节点的ObjectWrap类在v8中包装和访问较大应用程序中的对象.
问题是,包裹物体的寿命是有限的.如果,在javascript中,我执行类似于:
var win = app.getWindow(); win.close(); // The C++ object that win references goes away console.log(win.width()); // This should fail.
我希望它的行为就像评论所说的那样.在win.close()之后(或者某些其他事件可能在JS控件之外),对win或duplicated句柄的任何访问都需要失败.
目前,我必须将包装的C对象标记为无效,并检查每个方法调用的有效性.这是唯一的方法,还是有办法将句柄标记为不再有效?
想到的唯一方法就是有一个额外的函数,在调用时会产生错误.然后,当您调用’.close’时,您可以在win上创建优先于对象原型版本的属性.function closedError() { return new Error("Window Closed"); } win.close = function() { this.width = closedError; this.otherfunc = closedError; };
我目前没有方便的编译器,但我在C中想象这样的东西.
static Handle<Value> Close(const Arguments& args) { HandleScope scope; NODE_SET_METHOD(args.This(), "width", Window::Width); NODE_SET_METHOD(args.This(), "otherfunc", Window::OtherFunc); }