小编use*_*354的帖子

调用在Node.js和v8中使用包装对象作为参数的函数

我想在node.js中执行类似下面的操作...

var a = new A(); var b = new B();

// onTick应该是一个以B的实例作为参数的函数

a.onTick = function(bInst){....}

一个循环();

意味着A有一个属性"onTick",它是一个在循环内调用的函数.注意,A和B被定义为C++包装函数,这里是定义

void AClass::Init(Handle<Object> target) {
  Local<FunctionTemplate> tpl = FunctionTemplate::New(New);
  tpl->SetClassName(String::NewSymbol("A"));
  tpl->InstanceTemplate()->SetInternalFieldCount(1);
  tpl->PrototypeTemplate()->Set(String::NewSymbol("tick"),
      FunctionTemplate::New(Tick)->GetFunction());
  tpl->PrototypeTemplate()->Set(String::NewSymbol("loop"),
  FunctionTemplate::New(Loop)->GetFunction());

  constructor = Persistent<Function>::New(tpl->GetFunction());
  constructor->InstanceTemplate()->SetAccessor(String::New("onTick"), GetOnTick, SetOnTick);
  target->Set(String::NewSymbol("A"), constructor);
}

Handle<Value> AClass::New(const v8::Arguments &args) {
  HandleScope scope;
  AClass* acls = new AClass();
  WrappedAClass* wrappedA = new WrappedAClass();
  acls->wrappedAInst_ = wrappedA;
  window->Wrap(args.This());
  return args.This();
}
Handle<Value> AClass::Loop(const Arguments &args) {
  HandleScope scope;
  AClass* acls = ObjectWrap::Unwrap<AClass>(args.This());
  acls->wrappedInst_->loop();
  return scope.Close(Undefined());
} …
Run Code Online (Sandbox Code Playgroud)

c++ binding closures v8 node.js

5
推荐指数
1
解决办法
1747
查看次数

标签 统计

binding ×1

c++ ×1

closures ×1

node.js ×1

v8 ×1