Читая исходный код и находя разные функции, которые можно вызывать из js-кода, например new TCP
, не совсем понятно, как уровень C++ принимает аргументы на свой уровень для конкретной связанной функции.
Например, этот js-вызов связан
new TCP(TCPConstants.SERVER)
с следующим кодом на С++
void TCPWrap::New(const FunctionCallbackInfo<Value>& args) {
// This constructor should not be exposed to public javascript.
// Therefore we assert that we are not trying to call this as a
// normal function.
CHECK(args.IsConstructCall());
CHECK(args[0]->IsInt32());
Environment* env = Environment::GetCurrent(args);
int type_value = args[0].As<Int32>()->Value();
TCPWrap::SocketType type = static_cast<TCPWrap::SocketType>(type_value);
ProviderType provider;
switch (type) {
case SOCKET:
provider = PROVIDER_TCPWRAP;
break;
case SERVER:
provider = PROVIDER_TCPSERVERWRAP;
break;
default:
UNREACHABLE();
}
new TCPWrap(env, args.This(), provider);
}
То есть я хочу понять, как инициализируется уровень C++ const FunctionCallbackInfo<Value>& args
для связанной функции, спасибо.
@3CxEZiVlQ Не могли бы вы дать более подробный ответ? Хотелось бы рассмотреть все этапы более подробно.
Здесь
void TCPWrap::Initialize(Local<Object> target...
создает шаблон объекта с методамиopen
,bind
,connect
... иTCPWrap::New
вызывается при создании/конструкции объекта.