当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 使指向已删除C对象的句柄无效

来源:互联网 收集:自由互联 发布时间:2021-06-16
删除暴露给v8的C对象时,如何使可能指向此对象的句柄无效. 我正在使用v8作为更大应用程序的脚本接口.使用节点的ObjectWrap类在v8中包装和访问较大应用程序中的对象. 问题是,包裹物体的
删除暴露给v8的C对象时,如何使可能指向此对象的句柄无效.

我正在使用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);
}
网友评论