Как создать замыкание с помощью N-API?
Я хочу создать такой декоратор от Js. С помощью скалярных типов (число, строка...) я конвертирую их в типы C++, поэтому проблем нет. Как насчет других типов, таких как объект, функция и массив? Я обнаружил, что аргумент void* data может быть передан в Funtion::New, но я не видел примеров.
Вот мой код Javascript
function Decorator (objectA) {
return function (target, propertyKey, descriptor) {
const backup = descriptor.value;
descriptor.value = function (someParameters) {
//do something with someParameters and objectA
return backup.call(this, someParameters);
}
return descriptor;
}
}
Мой код C++
Value Decorator (const CallbackInfo& info) {
//do something...
auto objectA = info[0].As<Object>();
return Function::New(info.Env(), [objectA] (const CallbackInfo& info) -> Value {
//do something...
auto target = info[0].As<Object>();
auto propertyKey = info[1].As<String>();
auto descriptor = info[2].As<Object>();
auto backup = descriptor.Get("value").As<Function>();
descriptor.Set("value", Function::New(env, [backup, descriptor, objectA] (const CallbackInfo& info) -> Value {
//I want to access backup, objectA, but they've been already deleted at the time this function is called
}
return descriptor;
}
}