Как создать замыкание с помощью 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;
    }
}

0 ответов

Другие вопросы по тегам